Scripts/OldHisbradFoothills): Improved Escape from Durnholde Keep event. (#15189)

This commit is contained in:
UltraNix
2023-03-04 21:42:02 +01:00
committed by GitHub
parent ab4e95cc20
commit 321195f4f8
5 changed files with 281 additions and 81 deletions
@@ -0,0 +1,72 @@
--
DELETE FROM `creature_text` WHERE `CreatureID`=17876 AND `groupid` IN (21,22,23);
INSERT INTO `creature_text` VALUES
(17876,21,0,'Thrall startles the horse with a fierce yell!',16,0,100,0,0,0,0,0,'Thrall Horse Emote'),
(17876,22,0,'Thrall tries to calm the horse down.',16,0,100,0,0,0,0,0,'Thrall Horse Emote 2'),
(17876,23,0,'Taretha isn\'t here. Let\'s head into town.',12,0,100,0,0,0,0,0,'Thrall Say Lead');
UPDATE `creature_text` SET `groupid`=8 WHERE `CreatureID`=18096 AND `GroupId`=6;
UPDATE `creature_text` SET `groupid`=7 WHERE `CreatureID`=18096 AND `GroupId`=5;
UPDATE `creature_text` SET `groupid`=6 WHERE `CreatureID`=18096 AND `GroupId`=4;
UPDATE `creature_text` SET `groupid`=5 WHERE `CreatureID`=18096 AND `GroupId`=3;
UPDATE `creature_text` SET `groupid`=4 WHERE `CreatureID`=18096 AND `GroupId`=2;
UPDATE `creature_text` SET `groupid`=3 WHERE `CreatureID`=18096 AND `GroupId`=1;
UPDATE `creature_text` SET `groupid`=2 WHERE `CreatureID`=18096 AND `GroupId`=0 AND `id`=2;
UPDATE `creature_text` SET `groupid`=1 WHERE `CreatureID`=18096 AND `GroupId`=0 AND `id`=1;
UPDATE `script_waypoint` SET `waitTime`=13000 WHERE `entry`=17876 AND `pointid`=10;
UPDATE `script_waypoint` SET `waitTime`=20000 WHERE `entry`=17876 AND `pointid`=67;
DELETE FROM `waypoints` WHERE `entry` IN (180920,180921,180930,180940);
INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`) VALUES
(180920,1,2498.1045,695.5946,55.63158),
(180920,2,2495.6223,694.5012,55.63158),
(180920,3,2492.622,693.5881,55.699432),
(180920,4,2490.3777,695.98254,55.72346),
(180920,5,2490.0405,699.02325,55.73774),
(180920,6,2489.702,702.07544,55.759163),
(180920,7,2489.3306,702.90985,55.765854),
(180920,8,2488.1714,702.7047,55.77027),
(180921,1,2496.374,695.5221,55.63158),
(180921,2,2493.9353,694.89294,55.699627),
(180921,3,2490.935,693.97974,55.711452),
(180921,4,2491.0732,697.56885,55.724335),
(180921,5,2490.736,700.60956,55.741653),
(180921,6,2490.3975,703.66174,55.76295),
(180921,7,2487.7026,703.5013,55.777214),
(180930,1,2497.1765,697.05707,55.63158),
(180930,2,2495.118,696.15826,55.63158),
(180930,3,2492.1177,695.24506,55.70963),
(180930,4,2492.099,696.17346,55.713726),
(180930,5,2491.762,699.2142,55.728592),
(180930,6,2491.4233,702.26636,55.751934),
(180930,7,2489.0288,704.6154,55.77536),
(180930,8,2487.8696,704.4103,55.780678),
(180940,1,2495.4795,694.95447,55.63158),
(180940,2,2491.4536,694.1376,55.70895),
(180940,3,2490.363,703.972,55.764732);
UPDATE `smart_scripts` SET `link`=4 WHERE `entryorguid`=18092 AND `source_type`=0 AND `id`=3;
DELETE FROM `smart_scripts` WHERE `entryorguid`=18092 AND `source_type`=0 AND `id` IN (4,5,6);
INSERT INTO `smart_scripts` VALUES
(18092,0,4,0,61,0,100,0,0,0,0,0,0,53,0,180920,0,0,0,2,1,0,0,0,0,0,0,0,0,'Tarren Mill Guardsman - Do Action - Start WP'),
(18092,0,5,6,72,0,100,0,2,0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Tarren Mill Guardsman - Do Action - Remove Unit Flag'),
(18092,0,6,0,61,0,100,0,0,0,0,0,0,53,0,180921,0,0,0,2,1,0,0,0,0,0,0,0,0,'Tarren Mill Guardsman - Do Action - Start WP');
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=18092 AND `SourceId` IN (4,6);
INSERT INTO `conditions` VALUES
(22,0,18092,4,0,1,1,22805,0,0,0,0,0,'','Exeucte SAI if aura present'),
(22,0,18092,6,0,1,1,22805,0,0,1,0,0,'','Exeucte SAI if aura not present');
UPDATE `smart_scripts` SET `link`=8 WHERE `entryorguid`=18093 AND `source_type`=0 AND `id`=7;
DELETE FROM `smart_scripts` WHERE `entryorguid`=18093 AND `source_type`=0 AND `id`=8;
INSERT INTO `smart_scripts` VALUES
(18093,0,8,0,61,0,100,0,0,0,0,0,0,53,0,180930,0,0,0,2,1,0,0,0,0,0,0,0,0,'Tarren Mill Protector - Do Action - Start WP');
UPDATE `smart_scripts` SET `link`=6 WHERE `entryorguid`=18094 AND `source_type`=0 AND `id`=5;
DELETE FROM `smart_scripts` WHERE `entryorguid`=18094 AND `source_type`=0 AND `id`=6;
INSERT INTO `smart_scripts` VALUES
(18094,0,6,0,61,0,100,0,0,0,0,0,0,53,0,180940,0,0,0,2,1,0,0,0,0,0,0,0,0,'Tarren Mill Lookout - Do Action - Start WP');
@@ -118,12 +118,16 @@ public:
} }
else if (id == 2) else if (id == 2)
{ {
me->SummonCreature(NPC_SKARLOC_MOUNT, 2049.12f, 252.31f, 62.855f, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN);
me->Dismount(); me->Dismount();
me->SetWalk(true); me->SetWalk(true);
for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr)) if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr))
summon->SetWalk(true); summon->SetWalk(true);
if (Creature* mount = me->SummonCreature(NPC_SKARLOC_MOUNT, 2049.12f, 252.31f, 62.855f, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN))
{
mount->SetImmuneToNPC(true);
mount->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
} }
if (me->movespline->Finalized()) if (me->movespline->Finalized())
@@ -21,10 +21,10 @@
enum EpochHunter enum EpochHunter
{ {
SAY_AGGRO = 3, SAY_AGGRO = 5,
SAY_SLAY = 4, SAY_SLAY = 6,
SAY_BREATH = 5, SAY_BREATH = 7,
SAY_DEATH = 6, SAY_DEATH = 8,
SPELL_SAND_BREATH = 31914, SPELL_SAND_BREATH = 31914,
SPELL_IMPENDING_DEATH = 31916, SPELL_IMPENDING_DEATH = 31916,
@@ -54,6 +54,9 @@ enum Says
SAY_ENTER_CHURCH = 18, SAY_ENTER_CHURCH = 18,
SAY_GREET_TARETHA = 19, SAY_GREET_TARETHA = 19,
SAY_CHAT_TARETHA1 = 20, SAY_CHAT_TARETHA1 = 20,
SAY_EMOTE_HORSE = 21,
SAY_EMOTE_HORSE_2 = 22,
SAY_LEAD = 23,
SAY_TARETHA_FREE = 0, SAY_TARETHA_FREE = 0,
SAY_TARETHA_ESCAPED = 1, SAY_TARETHA_ESCAPED = 1,
@@ -87,7 +90,10 @@ enum Spells
SPELL_TELEPORT = 34776, SPELL_TELEPORT = 34776,
SPELL_MEMORY_WIPE = 33336, SPELL_MEMORY_WIPE = 33336,
SPELL_MEMORY_WIPE_RESUME = 33337 SPELL_MEMORY_WIPE_RESUME = 33337,
SPELL_KNOCKOUT_ARMORER = 32890,
SPELL_SALVATION = 33790,
SPELL_DUMMY_AURA = 22805
}; };
enum Npcs enum Npcs
@@ -133,8 +139,10 @@ enum Events
EVENT_START_WP = 7, EVENT_START_WP = 7,
EVENT_SET_FACING = 9, EVENT_SET_FACING = 9,
EVENT_KILL_ARMORER = 10, EVENT_ARMORER_SAY = 10,
EVENT_TALK_KILL_ARMORER = 11, EVENT_THRALL_EMOTE = 11,
EVENT_KILL_ARMORER = 12,
EVENT_TALK_KILL_ARMORER = 13,
EVENT_DRESSING_KNEEL = 20, EVENT_DRESSING_KNEEL = 20,
EVENT_DRESSING_ARMOR = 21, EVENT_DRESSING_ARMOR = 21,
@@ -149,12 +157,14 @@ enum Events
EVENT_LOOK_1 = 40, EVENT_LOOK_1 = 40,
EVENT_MOVE_AROUND = 41, EVENT_MOVE_AROUND = 41,
EVENT_LOOK_2 = 42, EVENT_LOOK_2 = 42,
EVENT_LOOK_3 = 43, EVENT_SUMMON_GUARDS = 43,
EVENT_SUMMON_GUARDS = 44, EVENT_LOOK_3 = 44,
EVENT_SUMMON_TALK1 = 45, EVENT_SUMMON_TALK1 = 45,
EVENT_SUMMON_TALK2 = 46, EVENT_LOOK_4 = 46,
EVENT_SUMMON_TALK2 = 47,
EVENT_GUARDS_MOVING = 48,
EVENT_LOOK_4 = 50, EVENT_LOOK_5 = 50,
EVENT_SUMMON_GUARDS_2 = 51, EVENT_SUMMON_GUARDS_2 = 51,
EVENT_SUMMON_TALK3 = 52, EVENT_SUMMON_TALK3 = 52,
@@ -186,7 +196,8 @@ enum Events
EVENT_EROZION_TALK_3 = 89, EVENT_EROZION_TALK_3 = 89,
EVENT_THRALL_TALK_6 = 90, EVENT_THRALL_TALK_6 = 90,
EVENT_THRALL_RUN_AWAY = 91, EVENT_THRALL_RUN_AWAY = 91,
EVENT_TARETHA_TALK_2 = 92 EVENT_TARETHA_TALK_2 = 92,
EVENT_EROZION_FLAGS = 93
}; };
class npc_thrall_old_hillsbrad : public CreatureScript class npc_thrall_old_hillsbrad : public CreatureScript
@@ -238,6 +249,8 @@ public:
npc_thrall_old_hillsbradAI(Creature* creature) : npc_escortAI(creature), summons(me) npc_thrall_old_hillsbradAI(Creature* creature) : npc_escortAI(creature), summons(me)
{ {
instance = creature->GetInstanceScript(); instance = creature->GetInstanceScript();
_barnWave = false;
_churchWave = false;
} }
void DoAction(int32 param) override void DoAction(int32 param) override
@@ -258,7 +271,7 @@ public:
events.ScheduleEvent(EVENT_SUMMON_CHRONO, 0); events.ScheduleEvent(EVENT_SUMMON_CHRONO, 0);
events.ScheduleEvent(EVENT_THRALL_TALK_2, 6000); events.ScheduleEvent(EVENT_THRALL_TALK_2, 6000);
events.ScheduleEvent(EVENT_TARETHA_FALL, 11000); events.ScheduleEvent(EVENT_TARETHA_FALL, 11000);
events.ScheduleEvent(EVENT_THRALL_TALK_3, 14000); events.ScheduleEvent(EVENT_THRALL_TALK_3, 15000);
events.ScheduleEvent(EVENT_THRALL_MOVE_DOWN, 17000); events.ScheduleEvent(EVENT_THRALL_MOVE_DOWN, 17000);
break; break;
case NPC_TARETHA: case NPC_TARETHA:
@@ -268,13 +281,14 @@ public:
events.ScheduleEvent(EVENT_THRALL_TALK_5, 17000); events.ScheduleEvent(EVENT_THRALL_TALK_5, 17000);
events.ScheduleEvent(EVENT_SUMMON_EROZION, 17500); events.ScheduleEvent(EVENT_SUMMON_EROZION, 17500);
events.ScheduleEvent(EVENT_EROZION_TALK_1, 18000); events.ScheduleEvent(EVENT_EROZION_TALK_1, 18000);
events.ScheduleEvent(EVENT_EROZION_ACTION_1, 26000); events.ScheduleEvent(EVENT_EROZION_ACTION_1, 24000);
events.ScheduleEvent(EVENT_EROZION_TALK_2, 29000); events.ScheduleEvent(EVENT_EROZION_TALK_2, 29000);
events.ScheduleEvent(EVENT_EROZION_TALK_3, 42000); events.ScheduleEvent(EVENT_EROZION_TALK_3, 40000);
events.ScheduleEvent(EVENT_EROZION_ACTION_2, 47000); events.ScheduleEvent(EVENT_EROZION_ACTION_2, 46000);
events.ScheduleEvent(EVENT_THRALL_TALK_6, 48000); events.ScheduleEvent(EVENT_THRALL_TALK_6, 48000);
events.ScheduleEvent(EVENT_THRALL_RUN_AWAY, 51000); events.ScheduleEvent(EVENT_THRALL_RUN_AWAY, 51000);
events.ScheduleEvent(EVENT_TARETHA_TALK_2, 53000); events.ScheduleEvent(EVENT_TARETHA_TALK_2, 53000);
events.ScheduleEvent(EVENT_EROZION_FLAGS, 56000);
break; break;
} }
} }
@@ -298,11 +312,13 @@ public:
break; break;
case 8: case 8:
events.ScheduleEvent(EVENT_SET_FACING, 500); events.ScheduleEvent(EVENT_SET_FACING, 500);
events.ScheduleEvent(EVENT_ARMORER_SAY, 700);
events.ScheduleEvent(EVENT_THRALL_EMOTE, 1300);
break; break;
case 9: case 9:
SetRun(false); SetRun(false);
events.ScheduleEvent(EVENT_KILL_ARMORER, 500); events.ScheduleEvent(EVENT_KILL_ARMORER, 500);
events.ScheduleEvent(EVENT_TALK_KILL_ARMORER, 4000); events.ScheduleEvent(EVENT_TALK_KILL_ARMORER, 3000);
break; break;
case 10: case 10:
SetRun(true); SetRun(true);
@@ -313,35 +329,33 @@ public:
events.ScheduleEvent(EVENT_DRESSING_SHIELD, 9000); events.ScheduleEvent(EVENT_DRESSING_SHIELD, 9000);
events.ScheduleEvent(EVENT_DRESSING_TALK, 12000); events.ScheduleEvent(EVENT_DRESSING_TALK, 12000);
break; break;
case 13:
me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2200.28f, 137.37f, 87.93f, 5.07f, TEMPSUMMON_MANUAL_DESPAWN);
me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2197.44f, 131.83f, 87.93f, 0.78f, TEMPSUMMON_MANUAL_DESPAWN);
me->SummonCreature(NPC_DURNHOLDE_MAGE, 2203.62f, 135.40f, 87.93f, 3.70f, TEMPSUMMON_MANUAL_DESPAWN);
me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2200.75f, 130.13f, 87.93f, 1.48f, TEMPSUMMON_MANUAL_DESPAWN);
break;
case 16:
me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2147.43f, 122.194f, 76.422f, 0.67f, TEMPSUMMON_MANUAL_DESPAWN);
me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2146.27f, 126.13f, 76.241f, 0.60f, TEMPSUMMON_MANUAL_DESPAWN);
me->SummonCreature(NPC_DURNHOLDE_MAGE, 2142.62f, 120.38f, 75.862f, 0.48f, TEMPSUMMON_MANUAL_DESPAWN);
me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2141.74f, 123.95f, 75.732f, 0.24f, TEMPSUMMON_MANUAL_DESPAWN);
break;
case 18: case 18:
me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2138.37f, 167.98f, 66.23f, 2.59f, TEMPSUMMON_MANUAL_DESPAWN); if (Creature* warden = me->SummonCreature(NPC_DURNHOLDE_WARDEN, 2149.4634f, 104.97559f, 73.632385f, 1.9065f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS))
me->SummonCreature(NPC_DURNHOLDE_WARDEN, 2142.76f, 173.62f, 66.23f, 2.59f, TEMPSUMMON_MANUAL_DESPAWN); {
me->SummonCreature(NPC_DURNHOLDE_MAGE, 2140.96f, 168.64f, 66.23f, 2.59f, TEMPSUMMON_MANUAL_DESPAWN); warden->SetWalk(true);
me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2142.53f, 171.03f, 66.23f, 2.59f, TEMPSUMMON_MANUAL_DESPAWN); warden->GetMotionMaster()->MovePoint(0, 2144.9893f, 117.81233f, 75.98518f);
break; }
case 22: if (Creature* veteran = me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2147.3281f, 106.72353f, 74.34447f, 1.6904f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS))
me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2108.73f, 190.43f, 66.23f, 5.56f, TEMPSUMMON_MANUAL_DESPAWN); {
me->SummonCreature(NPC_DURNHOLDE_MAGE, 2109.74f, 195.29f, 66.23f, 5.56f, TEMPSUMMON_MANUAL_DESPAWN); veteran->SetWalk(true);
me->SummonCreature(NPC_DURNHOLDE_MAGE, 2107.74f, 192.59f, 66.23f, 5.56f, TEMPSUMMON_MANUAL_DESPAWN); veteran->GetMotionMaster()->MovePoint(0, 2145.2092f, 124.361f, 76.13655f);
me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2112.26f, 195.13f, 66.23f, 5.56f, TEMPSUMMON_MANUAL_DESPAWN); }
if (Creature* veteran = me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2149.212f, 107.20052f, 74.15676f, 1.9887f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS))
{
veteran->SetWalk(true);
veteran->GetMotionMaster()->MovePoint(0, 2143.7898f, 119.41281f, 75.96626f);
}
if (Creature* mage = me->SummonCreature(NPC_DURNHOLDE_MAGE, 2147.624f, 104.61046f, 73.909294f, 1.6186f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS))
{
mage->SetWalk(true);
mage->GetMotionMaster()->MovePoint(0, 2146.975f, 118.05078f, 76.098465f);
}
break; break;
case 27: case 27:
instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_AMBUSHES_1); instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_AMBUSHES_1);
break; break;
case 28: case 28:
me->SummonCreature(NPC_CAPTAIN_SKARLOC, 1995.78f, 277.46f, 66.64f, 0.74f, TEMPSUMMON_MANUAL_DESPAWN); me->SummonCreature(NPC_CAPTAIN_SKARLOC, 1995.78f, 277.46f, 66.64f, 0.74f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2 * MINUTE * IN_MILLISECONDS);
break; break;
case 29: case 29:
SetEscortPaused(true); SetEscortPaused(true);
@@ -353,34 +367,45 @@ public:
break; break;
case 59: case 59:
instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_TARREN_MILL); instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_TARREN_MILL);
me->SummonCreature(NPC_SKARLOC_MOUNT, 2488.64f, 625.77f, 58.26f, 4.71f, TEMPSUMMON_TIMED_DESPAWN, 7000); if (Creature* mount = me->SummonCreature(NPC_SKARLOC_MOUNT, 2488.64f, 625.77f, 58.26f, 4.71f, TEMPSUMMON_TIMED_DESPAWN, 7000))
{
mount->SetImmuneToNPC(true);
mount->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
UnMountSelf(); UnMountSelf();
_mounted = false; _mounted = false;
SetRun(false); SetRun(false);
me->SetFacingTo(6.0388f);
break; break;
case 60: case 60:
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); me->HandleEmoteCommand(EMOTE_ONESHOT_CHEER);
if (Creature* horse = me->FindNearestCreature(NPC_SKARLOC_MOUNT, 10.0f)) if (Creature* horse = me->FindNearestCreature(NPC_SKARLOC_MOUNT, 10.0f))
{
horse->GetMotionMaster()->MovePoint(0, 2501.15f, 572.14f, 54.13f); horse->GetMotionMaster()->MovePoint(0, 2501.15f, 572.14f, 54.13f);
horse->DespawnOrUnsummon(30 * IN_MILLISECONDS);
}
Talk(SAY_EMOTE_HORSE);
SetEscortPaused(true); SetEscortPaused(true);
SetRun(true); SetRun(true);
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
me->SetFacingTo(4.1364f);
break; break;
case 64: case 64:
SetRun(false); SetRun(false);
break; break;
case 67: case 67:
events.ScheduleEvent(EVENT_LOOK_1, 500); events.ScheduleEvent(EVENT_LOOK_1, 1200);
events.ScheduleEvent(EVENT_MOVE_AROUND, 3500); events.ScheduleEvent(EVENT_MOVE_AROUND, 3500);
events.ScheduleEvent(EVENT_LOOK_2, 5000); events.ScheduleEvent(EVENT_LOOK_2, 5000);
events.ScheduleEvent(EVENT_LOOK_3, 6700); events.ScheduleEvent(EVENT_SUMMON_GUARDS, 5100);
events.ScheduleEvent(EVENT_SUMMON_GUARDS, 6000); events.ScheduleEvent(EVENT_LOOK_3, 7000);
events.ScheduleEvent(EVENT_SUMMON_TALK1, 6500); events.ScheduleEvent(EVENT_SUMMON_TALK1, 12000);
events.ScheduleEvent(EVENT_SUMMON_TALK2, 12000); events.ScheduleEvent(EVENT_LOOK_4, 17000);
events.ScheduleEvent(EVENT_SUMMON_TALK2, 19000);
events.ScheduleEvent(EVENT_GUARDS_MOVING, 21000);
break; break;
case 82: case 82:
events.ScheduleEvent(EVENT_LOOK_4, 500); events.ScheduleEvent(EVENT_LOOK_5, 500);
events.ScheduleEvent(EVENT_SUMMON_GUARDS_2, 1000); events.ScheduleEvent(EVENT_SUMMON_GUARDS_2, 1000);
events.ScheduleEvent(EVENT_SUMMON_TALK3, 1500); events.ScheduleEvent(EVENT_SUMMON_TALK3, 1500);
break; break;
@@ -401,8 +426,11 @@ public:
SetRun(true); SetRun(true);
instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_TARETHA_MEET); instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_TARETHA_MEET);
if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID))) if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID)))
{
Taretha->HandleEmoteCommand(EMOTE_ONESHOT_CHEER);
Taretha->AI()->Talk(SAY_TARETHA_ESCAPED); Taretha->AI()->Talk(SAY_TARETHA_ESCAPED);
events.ScheduleEvent(EVENT_THRALL_TALK, 2000); }
events.ScheduleEvent(EVENT_THRALL_TALK, 4000);
break; break;
case 101: case 101:
SetEscortPaused(true); SetEscortPaused(true);
@@ -412,8 +440,6 @@ public:
events.ScheduleEvent(EVENT_START_WAVE_1, 25000); events.ScheduleEvent(EVENT_START_WAVE_1, 25000);
break; break;
case 103: case 103:
if (Creature* erozion = summons.GetCreatureWithEntry(NPC_EROZION))
erozion->SetNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_FINISHED); instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_FINISHED);
me->SetVisible(false); me->SetVisible(false);
break; break;
@@ -476,6 +502,20 @@ public:
ReorderInstance(data); ReorderInstance(data);
} }
void JustReachedHome() override
{
if (_barnWave)
{
_barnWave = false;
Talk(SAY_LEAD);
}
else if (_churchWave)
{
_churchWave = false;
Talk(SAY_CHURCH_END);
}
}
void KilledUnit(Unit*) override void KilledUnit(Unit*) override
{ {
Talk(SAY_RANDOM_KILL); Talk(SAY_RANDOM_KILL);
@@ -517,6 +557,13 @@ public:
case EVENT_OPEN_DOORS: case EVENT_OPEN_DOORS:
if (GameObject* doors = me->FindNearestGameObject(GO_PRISON_DOOR, 10.0f)) if (GameObject* doors = me->FindNearestGameObject(GO_PRISON_DOOR, 10.0f))
doors->SetGoState(GO_STATE_ACTIVE); doors->SetGoState(GO_STATE_ACTIVE);
me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2142.372f, 174.2907f, 66.30494f, 2.5656f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2138.178f, 168.6046f, 66.30494f, 2.4783f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2140.1458f, 169.23643f, 66.30494f, 2.4958f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2107.9377f, 192.07530f, 66.30494f, 2.5481f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
me->SummonCreature(NPC_DURNHOLDE_MAGE, 2142.3633f, 172.42600f, 66.30494f, 2.5481f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
me->SummonCreature(NPC_DURNHOLDE_MAGE, 2109.8518f, 195.14030f, 66.30493f, 2.4260f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
me->SummonCreature(NPC_DURNHOLDE_MAGE, 2108.4856f, 189.93457f, 66.30494f, 2.6878f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
break; break;
case EVENT_START_WP: case EVENT_START_WP:
Start(true, true); Start(true, true);
@@ -525,15 +572,28 @@ public:
case EVENT_SET_FACING: case EVENT_SET_FACING:
if (Creature* armorer = me->FindNearestCreature(NPC_DURNHOLDE_ARMORER, 30.0f)) if (Creature* armorer = me->FindNearestCreature(NPC_DURNHOLDE_ARMORER, 30.0f))
{ {
armorer->AI()->Talk(SAY_ARMORER_THRALL); armorer->GetMotionMaster()->Clear();
armorer->GetMotionMaster()->MoveIdle();
armorer->SetFacingToObject(me); armorer->SetFacingToObject(me);
me->SetFacingToObject(armorer); me->SetFacingToObject(armorer);
} }
break; break;
case EVENT_ARMORER_SAY:
if (Creature* armorer = me->FindNearestCreature(NPC_DURNHOLDE_ARMORER, 30.0f))
{
armorer->AI()->Talk(SAY_ARMORER_THRALL);
}
break;
case EVENT_THRALL_EMOTE:
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
break;
case EVENT_KILL_ARMORER: case EVENT_KILL_ARMORER:
me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK_UNARMED); me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK_UNARMED);
if (Creature* armorer = me->FindNearestCreature(NPC_DURNHOLDE_ARMORER, 30.0f)) if (Creature* armorer = me->FindNearestCreature(NPC_DURNHOLDE_ARMORER, 30.0f))
{
DoCast(armorer, SPELL_KNOCKOUT_ARMORER, true);
armorer->SetStandState(UNIT_STAND_STATE_DEAD); armorer->SetStandState(UNIT_STAND_STATE_DEAD);
}
break; break;
case EVENT_TALK_KILL_ARMORER: case EVENT_TALK_KILL_ARMORER:
Talk(SAY_KILL_ARMORER); Talk(SAY_KILL_ARMORER);
@@ -557,7 +617,29 @@ public:
break; break;
case EVENT_DRESSING_TALK: case EVENT_DRESSING_TALK:
instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_THRALL_ARMORED); instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_THRALL_ARMORED);
DoCastSelf(SPELL_SALVATION);
me->SetFacingTo(5.6897f);
Talk(SAY_GO_ARMORED); Talk(SAY_GO_ARMORED);
if (Creature* sentry = me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2185.916f, 140.38835f, 88.299866f, 5.9238f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS))
{
sentry->SetWalk(true);
sentry->GetMotionMaster()->MovePoint(0, 2191.9712f, 138.11394f, 88.2125f);
}
if (Creature* warden = me->SummonCreature(NPC_DURNHOLDE_WARDEN, 2188.5586f, 138.88553f, 88.299866f, 1.6031f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS))
{
warden->SetWalk(true);
warden->GetMotionMaster()->MovePoint(0, 2188.5068f, 140.48346f, 88.21251f);
}
if (Creature* veteran = me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2186.9856f, 142.199f, 88.299866f, 5.9049f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS))
{
veteran->SetWalk(true);
veteran->GetMotionMaster()->MovePoint(0, 2190.48f, 140.81056f, 88.21251f);
}
if (Creature* mage = me->SummonCreature(NPC_DURNHOLDE_MAGE, 2189.7336f, 140.64551f, 88.299866f, 3.9532f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS))
{
mage->SetWalk(true);
mage->GetMotionMaster()->MovePoint(0, 2187.8035f, 138.61118f, 88.21251f);
}
break; break;
case EVENT_ENTER_MOUNT: case EVENT_ENTER_MOUNT:
MountSelf(); MountSelf();
@@ -571,43 +653,60 @@ public:
Talk(SAY_MOUNTS_UP); Talk(SAY_MOUNTS_UP);
break; break;
case EVENT_LOOK_1: case EVENT_LOOK_1:
me->SetFacingTo(5.058f); me->SetFacingTo(5.0090f);
me->SetImmuneToNPC(true);
break; break;
case EVENT_MOVE_AROUND: case EVENT_MOVE_AROUND:
me->GetMotionMaster()->MovePoint(0, 2477.146f, 695.041f, 55.801f); me->GetMotionMaster()->MovePoint(0, 2477.146f, 695.041f, 55.801f);
break; break;
case EVENT_LOOK_2: case EVENT_LOOK_2:
me->SetFacingTo(2.297f); me->SetFacingTo(2.0071f);
break;
case EVENT_LOOK_3:
me->SetFacingTo(0.64f);
break; break;
case EVENT_SUMMON_GUARDS: case EVENT_SUMMON_GUARDS:
SetRun(true); SetRun(true);
me->SummonCreature(NPC_TM_PROTECTOR, 2501.34f, 700.80f, 55.573f, 3.92f, TEMPSUMMON_MANUAL_DESPAWN); me->SummonCreature(NPC_TM_PROTECTOR, 2501.5708f, 699.38086f, 55.64138f, 3.8571f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
me->SummonCreature(NPC_TM_LOOKOUT, 2503.02f, 699.11f, 55.57f, 3.92f, TEMPSUMMON_MANUAL_DESPAWN); me->SummonCreature(NPC_TM_LOOKOUT, 2500.7002f, 698.26746f, 55.618248f, 3.7350f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
me->SummonCreature(NPC_TM_GUARDSMAN, 2503.04f, 702.495f, 50.63f, 3.92f, TEMPSUMMON_MANUAL_DESPAWN); if (Creature* guardsman = me->SummonCreature(NPC_TM_GUARDSMAN, 2500.0908f, 699.9389f, 55.629555f, 4.2935f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS))
me->SummonCreature(NPC_TM_GUARDSMAN, 2504.72f, 700.806f, 55.62f, 3.92f, TEMPSUMMON_MANUAL_DESPAWN); {
guardsman->CastSpell(guardsman, SPELL_DUMMY_AURA, true);
}
me->SummonCreature(NPC_TM_GUARDSMAN, 2499.0579f, 698.99725f, 55.611156f, 4.5727f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
summons.DoAction(ACTION_SET_IMMUNE_FLAG); summons.DoAction(ACTION_SET_IMMUNE_FLAG);
break; break;
case EVENT_LOOK_3:
me->SetFacingTo(0.3490f);
break;
case EVENT_SUMMON_TALK1: case EVENT_SUMMON_TALK1:
if (Creature* summon = summons.GetCreatureWithEntry(NPC_TM_LOOKOUT)) if (Creature* summon = summons.GetCreatureWithEntry(NPC_TM_LOOKOUT))
summon->AI()->Talk(SAY_LOOKOUT_SAW); summon->AI()->Talk(SAY_LOOKOUT_SAW);
break; me->SetFacingTo(0.4363f);
case EVENT_SUMMON_TALK2:
if (Creature* summon = summons.GetCreatureWithEntry(NPC_TM_LOOKOUT))
summon->AI()->Talk(SAY_LOOKOUT_GO);
summons.DoAction(ACTION_REMOVE_IMMUNE_FLAG);
break; break;
case EVENT_LOOK_4: case EVENT_LOOK_4:
me->SetFacingTo(0.41f); me->SetFacingTo(4.7510f);
me->HandleEmoteCommand(EMOTE_ONESHOT_NO);
Talk(SAY_EMOTE_HORSE_2);
break;
case EVENT_SUMMON_TALK2:
me->SetFacingTo(0.4363f);
if (Creature* summon = summons.GetCreatureWithEntry(NPC_TM_LOOKOUT))
summon->AI()->Talk(SAY_LOOKOUT_GO);
me->SetImmuneToNPC(true);
break;
case EVENT_GUARDS_MOVING:
me->SetImmuneToNPC(false);
summons.DoAction(ACTION_REMOVE_IMMUNE_FLAG);
_barnWave = true;
break;
case EVENT_LOOK_5:
me->SetFacingTo(0.4886f);
Talk(SAY_ENTER_CHURCH); Talk(SAY_ENTER_CHURCH);
break; break;
case EVENT_SUMMON_GUARDS_2: case EVENT_SUMMON_GUARDS_2:
me->SummonCreature(NPC_TM_PROTECTOR, 2630.75f, 664.80f, 54.28f, 4.37f, TEMPSUMMON_MANUAL_DESPAWN); me->SummonCreature(NPC_TM_PROTECTOR, 2630.75f, 664.80f, 54.28f, 4.37f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
me->SummonCreature(NPC_TM_LOOKOUT, 2632.20f, 661.98f, 54.30f, 4.37f, TEMPSUMMON_MANUAL_DESPAWN); me->SummonCreature(NPC_TM_LOOKOUT, 2632.20f, 661.98f, 54.30f, 4.37f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
me->SummonCreature(NPC_TM_GUARDSMAN, 2630.02f, 662.75f, 54.28f, 4.37f, TEMPSUMMON_MANUAL_DESPAWN); me->SummonCreature(NPC_TM_GUARDSMAN, 2630.02f, 662.75f, 54.28f, 4.37f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
me->SummonCreature(NPC_TM_GUARDSMAN, 2632.86f, 664.05f, 54.31f, 4.37f, TEMPSUMMON_MANUAL_DESPAWN); me->SummonCreature(NPC_TM_GUARDSMAN, 2632.86f, 664.05f, 54.31f, 4.37f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS);
_churchWave = true;
break; break;
case EVENT_SUMMON_TALK3: case EVENT_SUMMON_TALK3:
if (Creature* summon = summons.GetCreatureWithEntry(NPC_TM_LOOKOUT)) if (Creature* summon = summons.GetCreatureWithEntry(NPC_TM_LOOKOUT))
@@ -625,7 +724,7 @@ public:
} }
break; break;
case EVENT_THRALL_TALK_2: case EVENT_THRALL_TALK_2:
me->SetFacingTo(2.67f); me->SetFacingTo(2.60f);
Talk(SAY_EPOCH_WONDER); Talk(SAY_EPOCH_WONDER);
break; break;
case EVENT_TARETHA_FALL: case EVENT_TARETHA_FALL:
@@ -638,16 +737,22 @@ public:
} }
break; break;
case EVENT_THRALL_TALK_3: case EVENT_THRALL_TALK_3:
me->SetFacingTo(5.78f); if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID)))
{
me->SetFacingToObject(Taretha);
}
Talk(SAY_EPOCH_KILL_TARETHA); Talk(SAY_EPOCH_KILL_TARETHA);
break; break;
case EVENT_THRALL_MOVE_DOWN: case EVENT_THRALL_MOVE_DOWN:
SetEscortPaused(false); SetEscortPaused(false);
break; break;
case EVENT_EPOCH_INTRO: case EVENT_EPOCH_INTRO:
me->SetFacingTo(1.33f);
if (Creature* epoch = summons.GetCreatureWithEntry(NPC_EPOCH_HUNTER)) if (Creature* epoch = summons.GetCreatureWithEntry(NPC_EPOCH_HUNTER))
{
me->SetFacingToObject(epoch);
epoch->SetFacingToObject(me);
epoch->AI()->Talk(SAY_EPOCH_ENTER3); epoch->AI()->Talk(SAY_EPOCH_ENTER3);
}
break; break;
case EVENT_SUMMON_INFINITES: case EVENT_SUMMON_INFINITES:
me->SummonCreature(NPC_EPOCH_LOOKOUT, 2647.57f, 701.17f, 56.215f, 4.3f, TEMPSUMMON_MANUAL_DESPAWN); me->SummonCreature(NPC_EPOCH_LOOKOUT, 2647.57f, 701.17f, 56.215f, 4.3f, TEMPSUMMON_MANUAL_DESPAWN);
@@ -715,15 +820,24 @@ public:
if (Player* player = itr->GetSource()) if (Player* player = itr->GetSource())
player->KilledMonsterCredit(20156); player->KilledMonsterCredit(20156);
me->SetFacingTo(5.76f); if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID)))
{
me->SetFacingToObject(Taretha);
}
me->SetImmuneToNPC(true);
break; break;
} }
case EVENT_THRALL_TALK_4: case EVENT_THRALL_TALK_4:
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK);
Talk(SAY_GREET_TARETHA); Talk(SAY_GREET_TARETHA);
break; break;
case EVENT_TARETHA_TALK_1: case EVENT_TARETHA_TALK_1:
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID))) if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID)))
{
Taretha->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
Taretha->AI()->Talk(SAY_TARETHA_TALK1); Taretha->AI()->Talk(SAY_TARETHA_TALK1);
}
break; break;
case EVENT_THRALL_TALK_5: case EVENT_THRALL_TALK_5:
Talk(SAY_CHAT_TARETHA1); Talk(SAY_CHAT_TARETHA1);
@@ -766,10 +880,14 @@ public:
case EVENT_TARETHA_TALK_2: case EVENT_TARETHA_TALK_2:
if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID))) if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID)))
{ {
Taretha->SetFacingTo(4.233f); Taretha->SetFacingToObject(me);
Taretha->AI()->Talk(SAY_TARETHA_TALK2); Taretha->AI()->Talk(SAY_TARETHA_TALK2);
} }
break; break;
case EVENT_EROZION_FLAGS:
if (Creature* erozion = summons.GetCreatureWithEntry(NPC_EROZION))
erozion->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
break;
} }
} }
@@ -832,7 +950,11 @@ public:
SetNextWaypoint(27, false); SetNextWaypoint(27, false);
break; break;
case ENCOUNTER_PROGRESS_SKARLOC_KILLED: case ENCOUNTER_PROGRESS_SKARLOC_KILLED:
me->SummonCreature(NPC_SKARLOC_MOUNT, 2049.12f, 252.31f, 62.855f, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN); if (Creature* mount = me->SummonCreature(NPC_SKARLOC_MOUNT, 2049.12f, 252.31f, 62.855f, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN))
{
mount->SetImmuneToNPC(true);
mount->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
SetNextWaypoint(30, false); SetNextWaypoint(30, false);
break; break;
case ENCOUNTER_PROGRESS_TARREN_MILL: case ENCOUNTER_PROGRESS_TARREN_MILL:
@@ -853,6 +975,8 @@ public:
SummonList summons; SummonList summons;
bool _mounted; bool _mounted;
bool _barnWave;
bool _churchWave;
}; };
}; };
@@ -50,8 +50,8 @@ enum NpcIds
NPC_DURNHOLDE_ARMORER = 18764, NPC_DURNHOLDE_ARMORER = 18764,
NPC_DURNHOLDE_WARDEN = 17833, NPC_DURNHOLDE_WARDEN = 17833,
NPC_DURNHOLDE_VETERAN = 17860, NPC_DURNHOLDE_VETERAN = 17860,
NPC_DURNHOLDE_MAGE = 17860, NPC_DURNHOLDE_MAGE = 18934,
NPC_DURNHOLDE_SENTRY = 17860, NPC_DURNHOLDE_SENTRY = 17819,
NPC_CAPTAIN_SKARLOC = 17862, NPC_CAPTAIN_SKARLOC = 17862,
NPC_SKARLOC_MOUNT = 18798, NPC_SKARLOC_MOUNT = 18798,