mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 15:40:45 +01:00
Script/Quest: Trail of Fire (#17939)
This commit is contained in:
68
sql/updates/world/3.3.5/9999_99_99_99_world.sql
Normal file
68
sql/updates/world/3.3.5/9999_99_99_99_world.sql
Normal file
@@ -0,0 +1,68 @@
|
||||
--
|
||||
UPDATE `creature` SET `spawntimesecs`=0 WHERE `id`=23784;
|
||||
|
||||
DELETE FROM `creature_text` WHERE `entry`=23784;
|
||||
INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
|
||||
(23784, 0, 0, (SELECT `MaleText` FROM `broadcast_text` WHERE `ID`=22485), 12, 1, 100, 0, 0, 0, 22485, 0, "Apothecary Hanes"),
|
||||
(23784, 1, 0, (SELECT `MaleText` FROM `broadcast_text` WHERE `ID`=22486), 12, 1, 100, 0, 0, 0, 22486, 0, "Apothecary Hanes"),
|
||||
(23784, 2, 0, (SELECT `MaleText` FROM `broadcast_text` WHERE `ID`=22487), 12, 1, 100, 0, 0, 0, 22487, 0, "Apothecary Hanes"),
|
||||
(23784, 3, 0, (SELECT `MaleText` FROM `broadcast_text` WHERE `ID`=22489), 12, 1, 100, 0, 0, 0, 22489, 0, "Apothecary Hanes"),
|
||||
(23784, 4, 0, (SELECT `MaleText` FROM `broadcast_text` WHERE `ID`=22490), 12, 1, 100, 0, 0, 0, 22490, 0, "Apothecary Hanes"),
|
||||
(23784, 5, 0, (SELECT `MaleText` FROM `broadcast_text` WHERE `ID`=22491), 14, 1, 100, 0, 0, 0, 22491, 0, "Apothecary Hanes"),
|
||||
(23784, 6, 0, (SELECT `MaleText` FROM `broadcast_text` WHERE `ID`=22492), 12, 1, 100, 0, 0, 0, 22492, 0, "Apothecary Hanes"),
|
||||
(23784, 7, 0, (SELECT `MaleText` FROM `broadcast_text` WHERE `ID`=22493), 14, 1, 100, 0, 0, 0, 22493, 0, "Apothecary Hanes"),
|
||||
(23784, 8, 0, (SELECT `MaleText` FROM `broadcast_text` WHERE `ID`=22494), 12, 1, 100, 0, 0, 0, 22494, 0, "Apothecary Hanes");
|
||||
|
||||
DELETE FROM `script_waypoint` WHERE `entry`=23784;
|
||||
INSERT INTO `script_waypoint` (`entry`, `pointid`, `location_x`, `location_y`, `location_z`, `waittime`, `point_comment`) VALUES
|
||||
(23784, 1, 1379.813, -6409.201, 1.664683, 0, "Apothecary Hanes"),
|
||||
(23784, 2, 1380.114, -6401.745, 2.539683, 8000, "Apothecary Hanes"),
|
||||
(23784, 3, 1382.692, -6398.32, 3.308795, 0, "Apothecary Hanes"),
|
||||
(23784, 4, 1386.27, -6393.396, 3.577907, 0, "Apothecary Hanes"),
|
||||
(23784, 5, 1394.768, -6387.708, 3.702907, 0, "Apothecary Hanes"),
|
||||
(23784, 6, 1405.694, -6380.924, 4.62476, 0, "Apothecary Hanes"),
|
||||
(23784, 7, 1416.18, -6370.656, 6.12476, 0, "Apothecary Hanes"),
|
||||
(23784, 8, 1425.048, -6361.604, 6.229269, 0, "Apothecary Hanes"),
|
||||
(23784, 9, 1427.955, -6350.528, 6.354269, 0, "Apothecary Hanes"),
|
||||
(23784, 10, 1424.617, -6340.581, 5.729269, 0, "Apothecary Hanes"),
|
||||
(23784, 11, 1416.344, -6335.909, 5.729269, 0, "Apothecary Hanes"),
|
||||
(23784, 12, 1404.921, -6335.286, 6.229269, 0, "Apothecary Hanes"),
|
||||
(23784, 13, 1400.859, -6340.079, 6.479269, 8000, "Apothecary Hanes"),
|
||||
(23784, 14, 1407.071, -6332.194, 6.256171, 0, "Apothecary Hanes"),
|
||||
(23784, 15, 1418.821, -6332.194, 6.006171, 0, "Apothecary Hanes"),
|
||||
(23784, 16, 1419.282, -6332.309, 5.533074, 0, "Apothecary Hanes"),
|
||||
(23784, 17, 1428.454, -6335.082, 5.604269, 0, "Apothecary Hanes"),
|
||||
(23784, 18, 1446.955, -6338.777, 8.005317, 0, "Apothecary Hanes"),
|
||||
(23784, 19, 1457.27, -6343.141, 8.380317, 0, "Apothecary Hanes"),
|
||||
(23784, 20, 1465.724, -6345.168, 7.755317, 2000, "Apothecary Hanes"),
|
||||
(23784, 21, 1471.415, -6348.291, 7.692434, 7000, "Apothecary Hanes"),
|
||||
(23784, 22, 1462.058, -6341.999, 8.005317, 0, "Apothecary Hanes"),
|
||||
(23784, 23, 1465.077, -6331.357, 7.559553, 0, "Apothecary Hanes"),
|
||||
(23784, 24, 1475.621, -6327.219, 7.073432, 0, "Apothecary Hanes"),
|
||||
(23784, 25, 1490.551, -6315.318, 8.323432, 0, "Apothecary Hanes"),
|
||||
(23784, 26, 1497.682, -6311.022, 7.448432, 0, "Apothecary Hanes"),
|
||||
(23784, 27, 1505.303, -6313.513, 6.831386, 0, "Apothecary Hanes"),
|
||||
(23784, 28, 1506.431, -6317.528, 7.331386, 24000, "Apothecary Hanes"),
|
||||
(23784, 29, 1504.416, -6305.003, 6.581386, 0, "Apothecary Hanes"),
|
||||
(23784, 30, 1513.499, -6287.491, 5.818699, 0, "Apothecary Hanes"),
|
||||
(23784, 31, 1513.937, -6277.724, 5.568699, 0, "Apothecary Hanes"),
|
||||
(23784, 32, 1523.013, -6259.255, 4.647499, 0, "Apothecary Hanes"),
|
||||
(23784, 33, 1538.941, -6220.414, 6.448732, 0, "Apothecary Hanes"),
|
||||
(23784, 34, 1554.772, -6204.828, 6.698732, 0, "Apothecary Hanes"),
|
||||
(23784, 35, 1566.746, -6192.293, 7.72767, 0, "Apothecary Hanes"),
|
||||
(23784, 36, 1583.782, -6168.592, 8.35267, 0, "Apothecary Hanes"),
|
||||
(23784, 37, 1588.554, -6163.325, 7.94416, 0, "Apothecary Hanes"),
|
||||
(23784, 38, 1600.514, -6157.163, 8.714622, 0, "Apothecary Hanes"),
|
||||
(23784, 39, 1606.814 ,-6158.777, 8.839622, 0, "Apothecary Hanes"),
|
||||
(23784, 40, 1615.063 ,-6157.817, 9.339622, 10000, "Apothecary Hanes");
|
||||
|
||||
DELETE FROM `creature_equip_template` WHERE `creatureid`=23784;
|
||||
INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`, `VerifiedBuild`) VALUES
|
||||
(23784, 2, 1906, 0, 0, 0);
|
||||
|
||||
UPDATE `spell_dbc` SET `Effect1`=76, `EffectMiscValue1`=182071 WHERE `Id`=42686;
|
||||
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=42685;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
(13, 1, 42685, 0, 0, 31, 0, 3, 23968, 0, 0, 0, 0, "", "Spell 'Burn' targets NPC 'Hanes Fire Trigger' OR"),
|
||||
(13, 1, 42685, 0, 1, 31, 0, 3, 23784, 0, 0, 0, 0, "", "Spell 'Burn' targets NPC 'Apothecary Hanes'");
|
||||
@@ -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:
|
||||
me->DoCastSelf(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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user