Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
chapter2.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "ScriptMgr.h"
7#include "ScriptedCreature.h"
8#include "ScriptedEscortAI.h"
9#include "Player.h"
10#include "SpellInfo.h"
11#include "CreatureTextMgr.h"
12
13//How to win friends and influence enemies
14// texts signed for creature 28939 but used for 28939, 28940, 28610
29
31{
32public:
33 npc_crusade_persuaded() : CreatureScript("npc_crusade_persuaded") { }
34
36 {
37 return new npc_crusade_persuadedAI(creature);
38 }
39
41 {
42 npc_crusade_persuadedAI(Creature* creature) : ScriptedAI(creature) { }
43
47
49 {
50 speechTimer = 0;
51 speechCounter = 0;
52 playerGUID = 0;
53 me->SetReactState(REACT_AGGRESSIVE);
54 me->RestoreFaction();
55 }
56
57 void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE
58 {
59 if (spell->Id == SPELL_PERSUASIVE_STRIKE && caster->GetTypeId() == TypeID::TYPEID_PLAYER && me->IsAlive() && !speechCounter)
60 {
61 if (Player* player = caster->ToPlayer())
62 {
63 if (player->GetQuestStatus(QUEST_HOW_TO_WIN_FRIENDS) == QUEST_STATUS_INCOMPLETE)
64 {
65 playerGUID = player->GetGUID();
66 speechTimer = 1000;
67 speechCounter = 1;
68 me->setFaction(player->getFaction());
69 me->CombatStop(true);
70 me->GetMotionMaster()->MoveIdle();
71 me->SetReactState(REACT_PASSIVE);
73
76 }
77 }
78 }
79 }
80
82 {
83 if (speechCounter)
84 {
85 if (speechTimer <= diff)
86 {
88 if (!player)
89 {
91 return;
92 }
93
94 switch (speechCounter)
95 {
96 case 1:
98 speechTimer = 8000;
99 break;
100
101 case 2:
103 speechTimer = 8000;
104 break;
105
106 case 3:
108 speechTimer = 8000;
109 break;
110
111 case 4:
113 speechTimer = 8000;
114 break;
115
116 case 5:
118 speechTimer = 8000;
119 break;
120
121 case 6:
123 player->Kill(me);
124 speechCounter = 0;
126 return;
127 }
128
131 }
132 else
133 speechTimer -= diff;
134
135 return;
136 }
137
138 if (!UpdateVictim())
139 return;
140
142 }
143 };
144};
145
146/*######
147## npc_koltira_deathweaver
148######*/
149
175
177{
178public:
179 npc_koltira_deathweaver() : CreatureScript("npc_koltira_deathweaver") { }
180
181 bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE
182 {
183 if (quest->GetQuestId() == QUEST_BREAKOUT)
184 {
185 creature->SetStandState(UNIT_STAND_STATE_STAND);
186
188 escortAI->Start(false, false, player->GetGUID());
189 }
190 return true;
191 }
192
194 {
196 {
197 me->SetReactState(REACT_DEFENSIVE);
198 }
199
201 {
203 {
204 wave = 0;
205 waveTimer = 3000;
206 valrothGUID = 0;
207 me->LoadEquipment(0, true);
208 me->RemoveAurasDueToSpell(SPELL_ANTI_MAGIC_ZONE);
209 me->RemoveAurasDueToSpell(SPELL_KOLTIRA_TRANSFORM);
211 }
212 }
213
215 {
216 switch (waypointId)
217 {
218 case 0:
220 break;
221 case 1:
222 me->SetStandState(UNIT_STAND_STATE_KNEEL);
223 break;
224 case 2:
225 me->SetStandState(UNIT_STAND_STATE_STAND);
227 me->LoadEquipment();
228 break;
229 case 3:
230 SetEscortPaused(true);
232 me->SetStandState(UNIT_STAND_STATE_KNEEL);
235 break;
236 case 4:
237 SetRun(true);
238 break;
239 case 9:
241 break;
242 case 10:
243 me->Dismount();
244 break;
245 }
246 }
247
249 {
250 if (Player* player = GetPlayerForEscort())
251 summoned->AI()->AttackStart(player);
252
253 if (summoned->GetEntry() == NPC_HIGH_INQUISITOR_VALROTH)
254 valrothGUID = summoned->GetGUID();
255
256 summoned->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
257 }
258
259 void SummonAcolyte(uint32 uiAmount)
260 {
261 for (uint32 i = 0; i < uiAmount; ++i)
262 me->SummonCreature(NPC_CRIMSON_ACOLYTE, 1642.329f, -6045.818f, 127.583f, 0.0f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
263 }
264
266 {
268
270 {
271 if (waveTimer <= uiDiff)
272 {
273 switch (wave)
274 {
275 case 0:
277 SummonAcolyte(3);
278 waveTimer = 20000;
279 break;
280 case 1:
282 SummonAcolyte(3);
283 waveTimer = 20000;
284 break;
285 case 2:
287 SummonAcolyte(4);
288 waveTimer = 20000;
289 break;
290 case 3:
292 me->SummonCreature(NPC_HIGH_INQUISITOR_VALROTH, 1642.329f, -6045.818f, 127.583f, 0.0f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 1000);
293 waveTimer = 1000;
294 break;
295 case 4:
296 {
298
299 if (!temp || !temp->IsAlive())
300 {
302 waveTimer = 5000;
303 }
304 else
305 {
306 waveTimer = 2500;
307 return;
308 }
309 break;
310 }
311 case 5:
313 me->RemoveAurasDueToSpell(SPELL_ANTI_MAGIC_ZONE);
315 waveTimer = 2500;
316 break;
317 case 6:
319 SetEscortPaused(false);
320 break;
321 }
322
323 ++wave;
324 }
325 else
326 waveTimer -= uiDiff;
327 }
328 }
329
330 private:
334 };
335
337 {
338 return new npc_koltira_deathweaverAI(creature);
339 }
340};
341
342//Scarlet courier
351
353{
354public:
355 npc_scarlet_courier() : CreatureScript("npc_scarlet_courier") { }
356
358 {
359 return new npc_scarlet_courierAI(creature);
360 }
361
363 {
364 npc_scarlet_courierAI(Creature* creature) : ScriptedAI(creature) { }
365
368
370 {
371 me->Mount(14338); // not sure about this id
372 uiStage = 1;
373 uiStage_timer = 3000;
374 }
375
376 void EnterCombat(Unit* /*who*/) OVERRIDE
377 {
379 me->Dismount();
380 uiStage = 0;
381 }
382
384 {
385 if (type != POINT_MOTION_TYPE)
386 return;
387
388 if (id == 1)
389 uiStage = 2;
390 }
391
393 {
394 if (uiStage && !me->IsInCombat())
395 {
396 if (uiStage_timer <= diff)
397 {
398 switch (uiStage)
399 {
400 case 1:
401 me->SetWalk(true);
402 if (GameObject* tree = me->FindNearestGameObject(GO_INCONSPICUOUS_TREE, 40.0f))
403 {
405 float x, y, z;
406 tree->GetContactPoint(me, x, y, z);
407 me->GetMotionMaster()->MovePoint(1, x, y, z);
408 }
409 break;
410 case 2:
411 if (GameObject* tree = me->FindNearestGameObject(GO_INCONSPICUOUS_TREE, 40.0f))
412 if (Unit* unit = tree->GetOwner())
413 AttackStart(unit);
414 break;
415 }
416 uiStage_timer = 3000;
417 uiStage = 0;
418 } else uiStage_timer -= diff;
419 }
420
421 if (!UpdateVictim())
422 return;
423
425 }
426 };
427};
428
429//Koltira & Valroth- Breakout
430
442
444{
445public:
446 npc_high_inquisitor_valroth() : CreatureScript("npc_high_inquisitor_valroth") { }
447
449 {
450 return new npc_high_inquisitor_valrothAI(creature);
451 }
452
454 {
456
460
462 {
463 uiRenew_timer = 1000;
466 }
467
473
475 {
476 if (uiRenew_timer <= diff)
477 {
478 Shout();
480 uiRenew_timer = std::rand() % 6000 + 1000;
481 } else uiRenew_timer -= diff;
482
483 if (uiInquisitor_Penance_timer <= diff)
484 {
485 Shout();
487 uiInquisitor_Penance_timer = std::rand() % 7000 + 2000;
488 } else uiInquisitor_Penance_timer -= diff;
489
490 if (uiValroth_Smite_timer <= diff)
491 {
492 Shout();
494 uiValroth_Smite_timer = std::rand() % 6000 + 1000;
495 } else uiValroth_Smite_timer -= diff;
496
498 }
499
500 void Shout()
501 {
502 if (rand()%100 < 15)
504 }
505
506 void JustDied(Unit* killer) OVERRIDE
507 {
509 killer->CastSpell(me, SPELL_SUMMON_VALROTH_REMAINS, true);
510 }
511 };
512};
513
514/*######
515## npc_a_special_surprise
516######*/
517//used by 29032, 29061, 29065, 29067, 29068, 29070, 29074, 29072, 29073, 29071 but signed for 29032
519{
520 SAY_EXEC_START_1 = 0, // speech for all
574
576};
577
579{
580public:
581 npc_a_special_surprise() : CreatureScript("npc_a_special_surprise") { }
582
584 {
585 return new npc_a_special_surpriseAI(creature);
586 }
587
589 {
591
595
597 {
600 PlayerGUID = 0;
601
603 }
604
606 {
607 switch (me->GetEntry())
608 {
609 case 29061: // Ellen Stanbridge
610 if (player->GetQuestStatus(12742) == QUEST_STATUS_INCOMPLETE)
611 return true;
612 break;
613 case 29072: // Kug Ironjaw
614 if (player->GetQuestStatus(12748) == QUEST_STATUS_INCOMPLETE)
615 return true;
616 break;
617 case 29067: // Donovan Pulfrost
618 if (player->GetQuestStatus(12744) == QUEST_STATUS_INCOMPLETE)
619 return true;
620 break;
621 case 29065: // Yazmina Oakenthorn
622 if (player->GetQuestStatus(12743) == QUEST_STATUS_INCOMPLETE)
623 return true;
624 break;
625 case 29071: // Antoine Brack
626 if (player->GetQuestStatus(12750) == QUEST_STATUS_INCOMPLETE)
627 return true;
628 break;
629 case 29032: // Malar Bravehorn
630 if (player->GetQuestStatus(12739) == QUEST_STATUS_INCOMPLETE)
631 return true;
632 break;
633 case 29068: // Goby Blastenheimer
634 if (player->GetQuestStatus(12745) == QUEST_STATUS_INCOMPLETE)
635 return true;
636 break;
637 case 29073: // Iggy Darktusk
638 if (player->GetQuestStatus(12749) == QUEST_STATUS_INCOMPLETE)
639 return true;
640 break;
641 case 29074: // Lady Eonys
642 if (player->GetQuestStatus(12747) == QUEST_STATUS_INCOMPLETE)
643 return true;
644 break;
645 case 29070: // Valok the Righteous
646 if (player->GetQuestStatus(12746) == QUEST_STATUS_INCOMPLETE)
647 return true;
648 break;
649 }
650
651 return false;
652 }
653
655
656 {
657 if (PlayerGUID || who->GetTypeId() != TypeID::TYPEID_PLAYER || !who->IsWithinDist(me, INTERACTION_DISTANCE))
658 return;
659
660 if (MeetQuestCondition(who->ToPlayer()))
661 PlayerGUID = who->GetGUID();
662 }
663
665 {
666 if (PlayerGUID && !me->GetVictim() && me->IsAlive())
667 {
668 if (ExecuteSpeech_Timer <= diff)
669 {
671
672 if (!player)
673 {
674 Reset();
675 return;
676 }
677
679
680 switch (player->getRace())
681 {
682 case RACE_HUMAN:
683 switch (ExecuteSpeech_Counter)
684 {
685 case 0: Talk(SAY_EXEC_START_1, player); break;
686 case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break;
687 case 2: Talk(SAY_EXEC_PROG_5, player); break;
688 case 3: Talk(SAY_EXEC_NAME_1, player); break;
689 case 4: Talk(SAY_EXEC_RECOG_1, player); break;
690 case 5: Talk(SAY_EXEC_NOREM_5, player); break;
691 case 6: Talk(SAY_EXEC_THINK_7, player); break;
692 case 7: Talk(SAY_EXEC_LISTEN_1, player); break;
693 case 8:
694 if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f))
695 Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player);
696 break;
697 case 9:
698 Talk(SAY_EXEC_TIME_6, player);
699 me->SetStandState(UNIT_STAND_STATE_KNEEL);
701 break;
702 case 10:
703 Talk(SAY_EXEC_WAITING, player);
704 break;
705 case 11:
707 me->setDeathState(DeathState::JUST_DIED);
708 me->SetHealth(0);
709 return;
710 }
711 break;
712 case RACE_ORC:
713 switch (ExecuteSpeech_Counter)
714 {
715 case 0: Talk(SAY_EXEC_START_1, player); break;
716 case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break;
717 case 2: Talk(SAY_EXEC_PROG_6, player); break;
718 case 3: Talk(SAY_EXEC_NAME_1, player); break;
719 case 4: Talk(SAY_EXEC_RECOG_1, player); break;
720 case 5: Talk(SAY_EXEC_NOREM_7, player); break;
721 case 6: Talk(SAY_EXEC_THINK_8, player); break;
722 case 7: Talk(SAY_EXEC_LISTEN_1, player); break;
723 case 8:
724 if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f))
725 Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player);
726 break;
727 case 9:
728 Talk(SAY_EXEC_TIME_8, player);
729 me->SetStandState(UNIT_STAND_STATE_KNEEL);
731 break;
732 case 10:
733 Talk(SAY_EXEC_WAITING, player);
734 break;
735 case 11:
737 me->setDeathState(DeathState::JUST_DIED);
738 me->SetHealth(0);
739 return;
740 }
741 break;
742 case RACE_DWARF:
743 switch (ExecuteSpeech_Counter)
744 {
745 case 0: Talk(SAY_EXEC_START_2, player); break;
746 case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break;
747 case 2: Talk(SAY_EXEC_PROG_2, player); break;
748 case 3: Talk(SAY_EXEC_NAME_1, player); break;
749 case 4: Talk(SAY_EXEC_RECOG_3, player); break;
750 case 5: Talk(SAY_EXEC_NOREM_2, player); break;
751 case 6: Talk(SAY_EXEC_THINK_5, player); break;
752 case 7: Talk(SAY_EXEC_LISTEN_2, player); break;
753 case 8:
754 if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f))
755 Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player);
756 break;
757 case 9:
758 Talk(SAY_EXEC_TIME_3, player);
759 me->SetStandState(UNIT_STAND_STATE_KNEEL);
761 break;
762 case 10:
763 Talk(SAY_EXEC_WAITING, player);
764 break;
765 case 11:
767 me->setDeathState(DeathState::JUST_DIED);
768 me->SetHealth(0);
769 return;
770 }
771 break;
772 case RACE_NIGHTELF:
773 switch (ExecuteSpeech_Counter)
774 {
775 case 0: Talk(SAY_EXEC_START_1, player); break;
776 case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break;
777 case 2: Talk(SAY_EXEC_PROG_5, player); break;
778 case 3: Talk(SAY_EXEC_NAME_1, player); break;
779 case 4: Talk(SAY_EXEC_RECOG_1, player); break;
780 case 5: Talk(SAY_EXEC_NOREM_6, player); break;
781 case 6: Talk(SAY_EXEC_THINK_2, player); break;
782 case 7: Talk(SAY_EXEC_LISTEN_1, player); break;
783 case 8:
784 if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f))
785 Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player);
786 break;
787 case 9:
788 Talk(SAY_EXEC_TIME_7, player);
789 me->SetStandState(UNIT_STAND_STATE_KNEEL);
791 break;
792 case 10:
793 Talk(SAY_EXEC_WAITING, player);
794 break;
795 case 11:
797 me->setDeathState(DeathState::JUST_DIED);
798 me->SetHealth(0);
799 return;
800 }
801 break;
803 switch (ExecuteSpeech_Counter)
804 {
805 case 0: Talk(SAY_EXEC_START_1, player); break;
806 case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break;
807 case 2: Talk(SAY_EXEC_PROG_3, player); break;
808 case 3: Talk(SAY_EXEC_NAME_1, player); break;
809 case 4: Talk(SAY_EXEC_RECOG_4, player); break;
810 case 5: Talk(SAY_EXEC_NOREM_3, player); break;
811 case 6: Talk(SAY_EXEC_THINK_1, player); break;
812 case 7: Talk(SAY_EXEC_LISTEN_3, player); break;
813 case 8:
814 if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f))
815 Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player);
816 break;
817 case 9:
818 Talk(SAY_EXEC_TIME_4, player);
819 me->SetStandState(UNIT_STAND_STATE_KNEEL);
821 break;
822 case 10:
823 Talk(SAY_EXEC_WAITING, player);
824 break;
825 case 11:
827 me->setDeathState(DeathState::JUST_DIED);
828 me->SetHealth(0);
829 return;
830 }
831 break;
832 case RACE_TAUREN:
833 switch (ExecuteSpeech_Counter)
834 {
835 case 0: Talk(SAY_EXEC_START_1, player); break;
836 case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break;
837 case 2: Talk(SAY_EXEC_PROG_1, player); break;
838 case 3: Talk(SAY_EXEC_NAME_1, player); break;
839 case 4: Talk(SAY_EXEC_RECOG_5, player); break;
840 case 5: Talk(SAY_EXEC_NOREM_8, player); break;
841 case 6: Talk(SAY_EXEC_THINK_9, player); break;
842 case 7: Talk(SAY_EXEC_LISTEN_1, player); break;
843 case 8:
844 if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f))
845 Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player);
846 break;
847 case 9:
848 Talk(SAY_EXEC_TIME_9, player);
849 me->SetStandState(UNIT_STAND_STATE_KNEEL);
851 break;
852 case 10:
853 Talk(SAY_EXEC_WAITING, player);
854 break;
855 case 11:
857 me->setDeathState(DeathState::JUST_DIED);
858 me->SetHealth(0);
859 return;
860 }
861 break;
862 case RACE_GNOME:
863 switch (ExecuteSpeech_Counter)
864 {
865 case 0: Talk(SAY_EXEC_START_1, player); break;
866 case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break;
867 case 2: Talk(SAY_EXEC_PROG_4, player); break;
868 case 3: Talk(SAY_EXEC_NAME_1, player); break;
869 case 4: Talk(SAY_EXEC_RECOG_1, player); break;
870 case 5: Talk(SAY_EXEC_NOREM_4, player); break;
871 case 6: Talk(SAY_EXEC_THINK_6, player); break;
872 case 7: Talk(SAY_EXEC_LISTEN_1, player); break;
873 case 8:
874 if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f))
875 Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player);
876 break;
877 case 9:
878 Talk(SAY_EXEC_TIME_5, player);
879 me->SetStandState(UNIT_STAND_STATE_KNEEL);
881 break;
882 case 10:
883 Talk(SAY_EXEC_WAITING, player);
884 break;
885 case 11:
887 me->setDeathState(DeathState::JUST_DIED);
888 me->SetHealth(0);
889 return;
890 }
891 break;
892 case RACE_TROLL:
893 switch (ExecuteSpeech_Counter)
894 {
895 case 0: Talk(SAY_EXEC_START_3, player); break;
896 case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break;
897 case 2: Talk(SAY_EXEC_PROG_7, player); break;
898 case 3: Talk(SAY_EXEC_NAME_2, player); break;
899 case 4: Talk(SAY_EXEC_RECOG_6, player); break;
900 case 5: Talk(SAY_EXEC_NOREM_9, player); break;
901 case 6: Talk(SAY_EXEC_THINK_10, player); break;
902 case 7: Talk(SAY_EXEC_LISTEN_4, player); break;
903 case 8:
904 if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f))
905 Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player);
906 break;
907 case 9:
908 Talk(SAY_EXEC_TIME_10, player);
909 me->SetStandState(UNIT_STAND_STATE_KNEEL);
911 break;
912 case 10:
913 Talk(SAY_EXEC_WAITING, player);
914 break;
915 case 11:
917 me->setDeathState(DeathState::JUST_DIED);
918 me->SetHealth(0);
919 return;
920 }
921 break;
922 case RACE_BLOODELF:
923 switch (ExecuteSpeech_Counter)
924 {
925 case 0: Talk(SAY_EXEC_START_1, player); break;
926 case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break;
927 case 2: Talk(SAY_EXEC_PROG_1, player); break;
928 case 3: Talk(SAY_EXEC_NAME_1, player); break;
929 case 4: Talk(SAY_EXEC_RECOG_1, player); break;
930 //case 5: //unknown
931 case 6: Talk(SAY_EXEC_THINK_3, player); break;
932 case 7: Talk(SAY_EXEC_LISTEN_1, player); break;
933 case 8:
934 if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f))
935 Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player);
936 break;
937 case 9:
938 Talk(SAY_EXEC_TIME_1, player);
939 me->SetStandState(UNIT_STAND_STATE_KNEEL);
941 break;
942 case 10:
943 Talk(SAY_EXEC_WAITING, player);
944 break;
945 case 11:
947 me->setDeathState(DeathState::JUST_DIED);
948 me->SetHealth(0);
949 return;
950 }
951 break;
952 case RACE_DRAENEI:
953 switch (ExecuteSpeech_Counter)
954 {
955 case 0: Talk(SAY_EXEC_START_1, player); break;
956 case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break;
957 case 2: Talk(SAY_EXEC_PROG_1, player); break;
958 case 3: Talk(SAY_EXEC_NAME_1, player); break;
959 case 4: Talk(SAY_EXEC_RECOG_2, player); break;
960 case 5: Talk(SAY_EXEC_NOREM_1, player); break;
961 case 6: Talk(SAY_EXEC_THINK_4, player); break;
962 case 7: Talk(SAY_EXEC_LISTEN_1, player); break;
963 case 8:
964 if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f))
965 Plaguefist->AI()->Talk(SAY_PLAGUEFIST, player);
966 break;
967 case 9:
968 Talk(SAY_EXEC_TIME_2, player);
969 me->SetStandState(UNIT_STAND_STATE_KNEEL);
971 break;
972 case 10:
973 Talk(SAY_EXEC_WAITING, player);
974 break;
975 case 11:
977 me->setDeathState(DeathState::JUST_DIED);
978 me->SetHealth(0);
979 return;
980 }
981 break;
982 }
983
984 if (ExecuteSpeech_Counter >= 9)
985 ExecuteSpeech_Timer = 15000;
986 else
987 ExecuteSpeech_Timer = 7000;
988
990 }
991 else
992 ExecuteSpeech_Timer -= diff;
993 }
994 }
995 };
996};
997
#define sCreatureTextMgr
@ TEXT_RANGE_NORMAL
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
std::uint64_t uint64
Definition Define.h:76
@ POINT_MOTION_TYPE
@ TYPEID_PLAYER
Definition Object.h:55
@ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
Definition Object.h:71
#define INTERACTION_DISTANCE
Definition Object.h:21
@ QUEST_STATUS_INCOMPLETE
Definition QuestDef.h:89
Creature * GetClosestCreatureWithEntry(WorldObject *source, uint32 entry, float maxSearchRange, bool alive)
#define CAST_AI(a, b)
@ STATE_ESCORT_PAUSED
@ STATE_ESCORT_ESCORTING
@ TEAM_OTHER
@ RACE_TROLL
@ RACE_UNDEAD_PLAYER
@ RACE_ORC
@ RACE_DRAENEI
@ RACE_NIGHTELF
@ RACE_BLOODELF
@ RACE_DWARF
@ RACE_GNOME
@ RACE_HUMAN
@ RACE_TAUREN
@ JUST_DIED
Definition Unit.h:504
@ UNIT_STAND_STATE_KNEEL
Definition Unit.h:170
@ UNIT_STAND_STATE_STAND
Definition Unit.h:162
@ REACT_DEFENSIVE
Definition Unit.h:1157
@ REACT_PASSIVE
Definition Unit.h:1156
@ REACT_AGGRESSIVE
Definition Unit.h:1158
@ UNIT_FLAG_NON_ATTACKABLE
Definition Unit.h:626
@ UNIT_FLAG_IMMUNE_TO_PC
Definition Unit.h:633
@ UNIT_FIELD_FLAGS
Koltira
Definition chapter2.cpp:151
@ SAY_BREAKOUT1
Definition chapter2.cpp:152
@ SAY_BREAKOUT2
Definition chapter2.cpp:153
@ SAY_BREAKOUT8
Definition chapter2.cpp:159
@ SPELL_ANTI_MAGIC_ZONE
Definition chapter2.cpp:164
@ SAY_BREAKOUT5
Definition chapter2.cpp:156
@ SAY_BREAKOUT6
Definition chapter2.cpp:157
@ NPC_HIGH_INQUISITOR_VALROTH
Definition chapter2.cpp:169
@ SPELL_KOLTIRA_TRANSFORM
Definition chapter2.cpp:163
@ MODEL_DEATH_KNIGHT_MOUNT
Definition chapter2.cpp:173
@ QUEST_BREAKOUT
Definition chapter2.cpp:166
@ SAY_BREAKOUT7
Definition chapter2.cpp:158
@ SAY_BREAKOUT3
Definition chapter2.cpp:154
@ SAY_BREAKOUT9
Definition chapter2.cpp:160
@ SAY_BREAKOUT10
Definition chapter2.cpp:161
@ SAY_BREAKOUT4
Definition chapter2.cpp:155
@ NPC_CRIMSON_ACOLYTE
Definition chapter2.cpp:168
SpecialSurprise
Definition chapter2.cpp:519
@ SAY_EXEC_TIME_7
Definition chapter2.cpp:568
@ SAY_EXEC_THINK_3
Definition chapter2.cpp:549
@ EMOTE_DIES
Definition chapter2.cpp:573
@ SAY_EXEC_RECOG_6
Definition chapter2.cpp:537
@ SAY_EXEC_TIME_2
Definition chapter2.cpp:563
@ SAY_EXEC_TIME_6
Definition chapter2.cpp:567
@ SAY_EXEC_NOREM_5
Definition chapter2.cpp:542
@ NPC_PLAGUEFIST
Definition chapter2.cpp:575
@ SAY_EXEC_THINK_4
Definition chapter2.cpp:550
@ SAY_EXEC_TIME_4
Definition chapter2.cpp:565
@ SAY_EXEC_THINK_10
Definition chapter2.cpp:556
@ SAY_EXEC_START_2
Definition chapter2.cpp:521
@ SAY_EXEC_TIME_10
Definition chapter2.cpp:571
@ SAY_EXEC_RECOG_4
Definition chapter2.cpp:535
@ SAY_EXEC_NOREM_6
Definition chapter2.cpp:543
@ SAY_EXEC_LISTEN_4
Definition chapter2.cpp:560
@ SAY_EXEC_RECOG_1
Definition chapter2.cpp:532
@ SAY_EXEC_LISTEN_1
Definition chapter2.cpp:557
@ SAY_EXEC_PROG_7
Definition chapter2.cpp:529
@ SAY_EXEC_RECOG_5
Definition chapter2.cpp:536
@ SAY_EXEC_THINK_9
Definition chapter2.cpp:555
@ SAY_EXEC_TIME_5
Definition chapter2.cpp:566
@ SAY_EXEC_THINK_6
Definition chapter2.cpp:552
@ SAY_EXEC_TIME_9
Definition chapter2.cpp:570
@ SAY_EXEC_PROG_4
Definition chapter2.cpp:526
@ SAY_EXEC_NAME_1
Definition chapter2.cpp:530
@ SAY_EXEC_THINK_2
Definition chapter2.cpp:548
@ SAY_EXEC_THINK_1
Definition chapter2.cpp:547
@ SAY_EXEC_START_3
Definition chapter2.cpp:522
@ SAY_EXEC_LISTEN_2
Definition chapter2.cpp:558
@ SAY_EXEC_PROG_6
Definition chapter2.cpp:528
@ SAY_EXEC_TIME_3
Definition chapter2.cpp:564
@ SAY_EXEC_PROG_5
Definition chapter2.cpp:527
@ SAY_EXEC_PROG_2
Definition chapter2.cpp:524
@ SAY_EXEC_THINK_8
Definition chapter2.cpp:554
@ SAY_EXEC_NAME_2
Definition chapter2.cpp:531
@ SAY_EXEC_NOREM_7
Definition chapter2.cpp:544
@ SAY_EXEC_NOREM_2
Definition chapter2.cpp:539
@ SAY_EXEC_NOREM_9
Definition chapter2.cpp:546
@ SAY_EXEC_RECOG_3
Definition chapter2.cpp:534
@ SAY_EXEC_TIME_8
Definition chapter2.cpp:569
@ SAY_EXEC_PROG_1
Definition chapter2.cpp:523
@ SAY_PLAGUEFIST
Definition chapter2.cpp:561
@ SAY_EXEC_THINK_5
Definition chapter2.cpp:551
@ SAY_EXEC_NOREM_8
Definition chapter2.cpp:545
@ SAY_EXEC_RECOG_2
Definition chapter2.cpp:533
@ SAY_EXEC_NOREM_4
Definition chapter2.cpp:541
@ SAY_EXEC_PROG_3
Definition chapter2.cpp:525
@ SAY_EXEC_NOREM_3
Definition chapter2.cpp:540
@ SAY_EXEC_WAITING
Definition chapter2.cpp:572
@ SAY_EXEC_LISTEN_3
Definition chapter2.cpp:559
@ SAY_EXEC_TIME_1
Definition chapter2.cpp:562
@ SAY_EXEC_NOREM_1
Definition chapter2.cpp:538
@ SAY_EXEC_START_1
Definition chapter2.cpp:520
@ SAY_EXEC_THINK_7
Definition chapter2.cpp:553
ScarletCourierEnum
Definition chapter2.cpp:344
@ SAY_TREE1
Definition chapter2.cpp:345
@ NPC_SCARLET_COURIER
Definition chapter2.cpp:349
@ GO_INCONSPICUOUS_TREE
Definition chapter2.cpp:348
@ SAY_TREE2
Definition chapter2.cpp:346
win_friends
Definition chapter2.cpp:16
@ SAY_CRUSADER
Definition chapter2.cpp:17
@ SAY_PERSUADED4
Definition chapter2.cpp:21
@ QUEST_HOW_TO_WIN_FRIENDS
Definition chapter2.cpp:27
@ SAY_PERSUADED5
Definition chapter2.cpp:22
@ SPELL_THREAT_PULSE
Definition chapter2.cpp:26
@ SPELL_PERSUASIVE_STRIKE
Definition chapter2.cpp:25
@ SAY_PERSUADED3
Definition chapter2.cpp:20
@ SAY_PERSUADED2
Definition chapter2.cpp:19
@ SAY_PERSUADE_RAND
Definition chapter2.cpp:24
@ SAY_PERSUADED6
Definition chapter2.cpp:23
@ SAY_PERSUADED1
Definition chapter2.cpp:18
valroth
Definition chapter2.cpp:432
@ SAY_VALROTH_RAND
Definition chapter2.cpp:435
@ SPELL_INQUISITOR_PENANCE
Definition chapter2.cpp:438
@ SPELL_RENEW
Definition chapter2.cpp:437
@ SAY_VALROTH_AGGRO
Definition chapter2.cpp:434
@ SPELL_VALROTH_SMITE
Definition chapter2.cpp:439
@ SAY_VALROTH_DEATH
Definition chapter2.cpp:436
@ SPELL_SUMMON_VALROTH_REMAINS
Definition chapter2.cpp:440
void AddSC_the_scarlet_enclave_c2()
Definition chapter2.cpp:998
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
virtual void EnterEvadeMode()
CreatureScript(const char *name)
static Player * GetPlayer(WorldObject const &, uint64 guid)
Player * ToPlayer()
Definition Object.h:204
void GroupEventHappens(uint32 questId, WorldObject const *pEventObject)
QuestStatus GetQuestStatus(uint32 quest_id) const
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCast(uint32 spellId)
Definition UnitAI.cpp:110
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:168
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:176
Definition Unit.h:1367
void Kill(Unit *victim, bool durabilityLoss=true)
Definition Unit.cpp:6342
Unit * GetOwner() const
Definition Unit.cpp:2339
bool IsAlive() const
Definition Unit.h:2032
static Creature * GetCreature(WorldObject &object, uint64 guid)
Definition Unit.cpp:4905
uint8 getRace() const
Definition Unit.h:1535
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition chapter2.cpp:583
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition chapter2.cpp:35
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition chapter2.cpp:448
bool OnQuestAccept(Player *player, Creature *creature, const Quest *quest) OVERRIDE
Definition chapter2.cpp:181
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition chapter2.cpp:336
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition chapter2.cpp:357
Creature * me
ScriptedAI(Creature *creature)
void AttackStart(Unit *) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition chapter2.cpp:664
void SpellHit(Unit *caster, const SpellInfo *spell) OVERRIDE
Definition chapter2.cpp:57
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition chapter2.cpp:81
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Player * GetPlayerForEscort()
void SetRun(bool on=true)
bool HasEscortState(uint32 escortState) const
npc_escortAI(Creature *creature)
void SetEscortPaused(bool on)
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition chapter2.cpp:474
void JustSummoned(Creature *summoned) OVERRIDE
Definition chapter2.cpp:248
void WaypointReached(uint32 waypointId) OVERRIDE
Definition chapter2.cpp:214
void UpdateAI(uint32 uiDiff) OVERRIDE
== Triggered Actions Requested ==================
Definition chapter2.cpp:265
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition chapter2.cpp:392
void MovementInform(uint32 type, uint32 id) OVERRIDE
Definition chapter2.cpp:383