diff options
author | SnapperRy <snapperryen@gmail.com> | 2016-09-25 19:14:50 +0200 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-03-03 22:55:23 +0100 |
commit | 6b8cb42b1e251e643876f574f004cd96fe95af86 (patch) | |
tree | 9b9d6a1a375d8512b0e806563f4e5427a22fc180 /src | |
parent | e5381f64fe7676e2d348df40b3039780fe9c7821 (diff) |
Script/Quest: Trail of Fire (#17939)
(cherry picked from commit 31e495f44c393f5162728b3bf902392f66fc872f)
Rename 9999_99_99_99_world.sql to 2016_09_25_03_world.sql
(cherry picked from commit 28968c61622da9c8831d8334bb25532a291a44eb)
DB/SAI: fix db errors introduced in 31e495f.
(cherry picked from commit 2452fb977b246629d50669cb646844b5e3b13cdd)
Core/Scripts: Fix build
(cherry picked from commit 6174091d761fa32591e1f6f8d01292813dd3ca2e)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/zone_howling_fjord.cpp | 188 |
1 files changed, 140 insertions, 48 deletions
diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index 85711c037de..80b4e0c0ead 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -40,13 +40,38 @@ EndContentData */ ######*/ enum Entries { - NPC_APOTHECARY_HANES = 23784, - FACTION_ESCORTEE_A = 774, - FACTION_ESCORTEE_H = 775, - NPC_HANES_FIRE_TRIGGER = 23968, - QUEST_TRAIL_OF_FIRE = 11241, - SPELL_COSMETIC_LOW_POLY_FIRE = 56274, - SPELL_HEALING_POTION = 17534 + NPC_APOTHECARY_HANES = 23784, + FACTION_ESCORTEE_H = 775, + QUEST_TRAIL_OF_FIRE = 11241, + + SPELL_HEALING_POTION = 17534, + SPELL_BURN = 42685, + + EVENT_EMOTE_BEG = 1, + EVENT_BEGIN = 2, + EVENT_START_ESCORT = 3, + EVENT_TALK_1 = 4, + EVENT_KNEEL = 5, + EVENT_TALK_2 = 6, + EVENT_BURN_CRATES = 7, + EVENT_TALK_3 = 8, + EVENT_TALK_4 = 9, + EVENT_LAUGH = 10, + EVENT_TALK_5 = 11, + EVENT_TALK_6 = 12, + EVENT_TALK_8 = 13, + + TALK_0 = 0, + TALK_1 = 1, + TALK_2 = 2, + TALK_3 = 3, + TALK_4 = 4, + TALK_5 = 5, + TALK_6 = 6, + TALK_7 = 7, + TALK_8 = 8, + + EQUIP_TORCH = 2 }; class npc_apothecary_hanes : public CreatureScript @@ -58,16 +83,7 @@ public: { if (quest->GetQuestId() == QUEST_TRAIL_OF_FIRE) { - switch (player->GetTeam()) - { - case ALLIANCE: - creature->setFaction(FACTION_ESCORTEE_A); - break; - case HORDE: - creature->setFaction(FACTION_ESCORTEE_H); - break; - } - ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID()); + ENSURE_AI(npc_Apothecary_HanesAI, (creature->AI()))->StartEscort(player); } return true; } @@ -79,12 +95,25 @@ public: Initialize(); } + void StartEscort(Player* player) + { + events.ScheduleEvent(EVENT_BEGIN, Seconds(2)); + events.ScheduleEvent(EVENT_START_ESCORT, Seconds(6)); + _player = player->GetGUID(); + } + void Initialize() { PotTimer = 10000; //10 sec cooldown on potion + events.Reset(); + events.ScheduleEvent(EVENT_EMOTE_BEG, Seconds(2)); + me->SetStandState(UNIT_STAND_STATE_KNEEL); + _player = ObjectGuid(); } uint32 PotTimer; + EventMap events; + ObjectGuid _player; void Reset() override { @@ -98,7 +127,7 @@ public: player->FailQuest(QUEST_TRAIL_OF_FIRE); } - void UpdateEscortAI(uint32 diff) override + void UpdateAI(uint32 diff) override { if (HealthBelowPct(75)) { @@ -108,8 +137,77 @@ public: PotTimer = 10000; } else PotTimer -= diff; } + if (GetAttack() && UpdateVictim()) DoMeleeAttackIfReady(); + + npc_escortAI::UpdateAI(diff); + + if (me->IsInCombat()) + return; + + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_EMOTE_BEG: + me->HandleEmoteCommand(EMOTE_ONESHOT_BEG); + events.ScheduleEvent(EVENT_EMOTE_BEG, Seconds(25)); + break; + case EVENT_BEGIN: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + Talk(TALK_0, player); + break; + case EVENT_START_ESCORT: + events.Reset(); + me->setFaction(FACTION_ESCORTEE_H); + me->SetReactState(REACT_AGGRESSIVE); + ENSURE_AI(npc_escortAI, (me->AI()))->Start(true, true, _player); + break; + case EVENT_TALK_1: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + Talk(TALK_1, player); + break; + case EVENT_KNEEL: + me->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL); + break; + case EVENT_TALK_2: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + Talk(TALK_2, player); + me->LoadEquipment(EQUIP_TORCH); + me->SetSheath(SHEATH_STATE_MELEE); + break; + case EVENT_BURN_CRATES: + DoCastAOE(SPELL_BURN, true); + break; + case EVENT_TALK_3: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + Talk(TALK_3, player); + break; + case EVENT_TALK_4: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + Talk(TALK_4, player); + break; + case EVENT_LAUGH: + me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH); + break; + case EVENT_TALK_5: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + Talk(TALK_5, player); + me->HandleEmoteCommand(EMOTE_ONESHOT_RUDE); + break; + case EVENT_TALK_6: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + Talk(TALK_6, player); + break; + case EVENT_TALK_8: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + Talk(TALK_8, player); + break; + } + } } void WaypointReached(uint32 waypointId) override @@ -121,42 +219,36 @@ public: switch (waypointId) { case 1: - me->SetReactState(REACT_AGGRESSIVE); - SetRun(true); - break; - case 23: - player->GroupEventHappens(QUEST_TRAIL_OF_FIRE, me); - me->DespawnOrUnsummon(); - break; - case 5: - if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER, 10.0f)) - Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false); - SetRun(false); + events.ScheduleEvent(EVENT_TALK_1, Seconds(3)); + events.ScheduleEvent(EVENT_KNEEL, Seconds(5)); + events.ScheduleEvent(EVENT_TALK_2, Seconds(6)); + me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 6: - if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER, 10.0f)) - Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false); - SetRun(true); + case 12: + events.ScheduleEvent(EVENT_BURN_CRATES, Seconds(1)); + events.ScheduleEvent(EVENT_TALK_3, Seconds(3)); break; - case 8: - if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER, 10.0f)) - Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false); - SetRun(false); + case 20: + events.ScheduleEvent(EVENT_BURN_CRATES, 0); break; - case 9: - if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER, 10.0f)) - Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false); + case 21: + events.ScheduleEvent(EVENT_BURN_CRATES, 0); + events.ScheduleEvent(EVENT_TALK_4, Seconds(3)); break; - case 10: - SetRun(true); + case 28: + events.ScheduleEvent(EVENT_BURN_CRATES, 0); + events.ScheduleEvent(EVENT_LAUGH, Seconds(7)); + events.ScheduleEvent(EVENT_TALK_5, Seconds(9)); + events.ScheduleEvent(EVENT_TALK_6, Seconds(17)); break; - case 13: - SetRun(false); + case 35: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + Talk(TALK_7, player); break; - case 14: - if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER, 10.0f)) - Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false); - SetRun(true); + case 40: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + player->GroupEventHappens(QUEST_TRAIL_OF_FIRE, me); + events.ScheduleEvent(EVENT_TALK_8, Seconds(4)); break; } } |