Script/Quest: Trail of Fire (#17939)

(cherry picked from commit 31e495f44c)

Rename 9999_99_99_99_world.sql to 2016_09_25_03_world.sql
(cherry picked from commit 28968c6162)

DB/SAI: fix db errors introduced in 31e495f.
(cherry picked from commit 2452fb977b)

Core/Scripts: Fix build
(cherry picked from commit 6174091d76)
This commit is contained in:
SnapperRy
2016-09-25 19:14:50 +02:00
committed by joschiwald
parent e5381f64fe
commit 6b8cb42b1e
3 changed files with 211 additions and 48 deletions

View File

@@ -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);
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 23:
player->GroupEventHappens(QUEST_TRAIL_OF_FIRE, me);
me->DespawnOrUnsummon();
case 12:
events.ScheduleEvent(EVENT_BURN_CRATES, Seconds(1));
events.ScheduleEvent(EVENT_TALK_3, Seconds(3));
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);
case 20:
events.ScheduleEvent(EVENT_BURN_CRATES, 0);
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 21:
events.ScheduleEvent(EVENT_BURN_CRATES, 0);
events.ScheduleEvent(EVENT_TALK_4, 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 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 9:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER, 10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
case 35:
if (Player* player = ObjectAccessor::GetPlayer(*me, _player))
Talk(TALK_7, player);
break;
case 10:
SetRun(true);
break;
case 13:
SetRun(false);
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;
}
}