aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSnapperRy <snapperryen@gmail.com>2016-09-25 19:14:50 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2017-03-03 22:55:23 +0100
commit6b8cb42b1e251e643876f574f004cd96fe95af86 (patch)
tree9b9d6a1a375d8512b0e806563f4e5427a22fc180 /src
parente5381f64fe7676e2d348df40b3039780fe9c7821 (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.cpp188
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;
}
}