mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-24 22:26:22 +00:00
fix(Scripts/Northrend): Last Rites [Quest 12019] (#8691)
This commit is contained in:
102
data/sql/updates/pending_db_world/rev_1634939032065262806.sql
Normal file
102
data/sql/updates/pending_db_world/rev_1634939032065262806.sql
Normal file
@@ -0,0 +1,102 @@
|
||||
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1634939032065262806');
|
||||
|
||||
-- *** Quest "Last rites" ***
|
||||
|
||||
-- Remove Quest SAI
|
||||
UPDATE `creature_template` SET `AIName`='' WHERE `entry` IN (26170,26203,25301,25250,25251);
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid` IN (26170,26203,25301,25250,25251) AND `source_type`=0;
|
||||
DELETE FROM `waypoints` WHERE `entry` IN (26170);
|
||||
|
||||
-- Add Gossip Option
|
||||
DELETE FROM `gossip_menu_option` WHERE `MenuID`=9417;
|
||||
INSERT INTO `gossip_menu_option` (`MenuID`,`OptionID`,`OptionIcon`,`OptionText`,`OptionBroadcastTextID`,`OptionType`,`OptionNpcFlag`,`ActionMenuID`,`ActionPoiID`,`BoxCoded`,`BoxMoney`,`BoxText`,`BoxBroadcastTextID`,`VerifiedBuild`) VALUES
|
||||
(9417,0,0,"Let's do this, Thassarian. It's now or never.",25840,1,1,0,0,0,0,NULL,0,0);
|
||||
|
||||
-- Add Gossip Text
|
||||
DELETE FROM `gossip_menu` WHERE `MenuID`=9417 AND `TextID`=12664;
|
||||
INSERT INTO `gossip_menu` (`MenuID`,`TextID`) VALUES
|
||||
(9417,12664);
|
||||
|
||||
-- Condition for source Gossip menu condition type Area id
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=9417 AND `SourceEntry` IN (12663,12664) AND `SourceId`=0;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
(14, 9417, 12663, 0, 0, 23, 0, 4126, 0, 0, 0, 0, 0, '', 'Show gossip menu 9417 text id 12663 if target area is The Wailing Ziggurat.'),
|
||||
(14, 9417, 12664, 0, 0, 23, 0, 4128, 0, 0, 0, 0, 0, '', 'Show gossip menu 9417 text id 12664 if target area is Naxxanar.');
|
||||
|
||||
-- Condition for source Gossip menu option condition type Quest taken
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9417 AND `SourceEntry`=0 AND `SourceId`=0;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
(15, 9417, 0, 0, 0, 9, 0, 12019, 0, 0, 0, 0, 0, '', 'Show gossip menu 9417 option id 0 if quest Last Rites has been taken.'),
|
||||
(15, 9417, 0, 0, 0, 23, 0, 4128, 0, 0, 0, 0, 0, '', 'Show gossip menu 9417 option id 0 if target area is Naxxanar.');
|
||||
|
||||
-- Pathing for Thassarian entry 26170 Quest script for "Last Rites"
|
||||
SET @PATH := 1013030;
|
||||
DELETE FROM `waypoint_data` WHERE `id`=@PATH;
|
||||
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
|
||||
(@PATH,1,3700.08,3574.54,473.322,0,0,0,100,0),
|
||||
(@PATH,2,3705.94,3573.63,476.841,0,0,0,100,0),
|
||||
(@PATH,3,3714.32,3572.3,477.442,0,0,0,100,0);
|
||||
|
||||
-- Pathing for Arthas entry 26203 Quest script for "Last Rites"
|
||||
SET @PATH := 1013031;
|
||||
DELETE FROM `waypoint_data` WHERE `id`=@PATH;
|
||||
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
|
||||
(@PATH,1,3733.2195,3538.1602,477.44214,0,0,0,100,0),
|
||||
(@PATH,2,3736.5,3556.1494,477.44086,0,0,0,100,0),
|
||||
(@PATH,3,3737.5398,3565.2202,477.44086,0,0,0,100,0);
|
||||
|
||||
-- Pathing for Talbot entry 25301 Quest script for "Last Rites"
|
||||
SET @PATH := 1013032;
|
||||
DELETE FROM `waypoint_data` WHERE `id`=@PATH;
|
||||
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
|
||||
(@PATH,1,3746.96,3607.5063,473.32144,0,0,0,100,0),
|
||||
(@PATH,2,3742.525,3586.4636,477.44086,0,0,0,100,0),
|
||||
(@PATH,3,3738.237,3570.3462,477.44086,0,0,0,100,0);
|
||||
|
||||
-- Pathing for Arlos entry 25250 Quest script for "Last Rites"
|
||||
SET @PATH := 1013033;
|
||||
DELETE FROM `waypoint_data` WHERE `id`=@PATH;
|
||||
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
|
||||
(@PATH,1,3742.4668,3598.8833,477.44287,0,0,0,100,0),
|
||||
(@PATH,2,3739.2288,3587.0754,477.44086,0,0,0,100,0),
|
||||
(@PATH,3,3735.5718,3572.422,477.44086,0,0,0,100,0);
|
||||
|
||||
-- Pathing for Leryssa entry 25251 Quest script for "Last Rites"
|
||||
SET @PATH := 1013034;
|
||||
DELETE FROM `waypoint_data` WHERE `id`=@PATH;
|
||||
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
|
||||
(@PATH,1,3750.0989,3603.0605,474.0086,0,0,0,100,0),
|
||||
(@PATH,2,3747.6187,3591.2925,477.44186,0,0,0,100,0),
|
||||
(@PATH,3,3741.9653,3571.4446,477.44086,0,0,0,100,0);
|
||||
|
||||
-- Add scriptnames
|
||||
UPDATE `creature_template` SET `ScriptName`='npc_leryssa' WHERE `entry`=25251;
|
||||
UPDATE `creature_template` SET `ScriptName`='npc_counselor_talbot' WHERE `entry`=25301;
|
||||
UPDATE `creature` SET `ScriptName`='npc_thassarian' WHERE `guid`=101136;
|
||||
UPDATE `creature` SET `ScriptName`='npc_thassarian2' WHERE `guid`=101303;
|
||||
|
||||
-- Image of the Lich King flags were wrong
|
||||
UPDATE `creature_template` SET `unit_flags`=768 WHERE `entry`=26203;
|
||||
|
||||
-- Prince Valanar fix class and expansion and add missing loot
|
||||
UPDATE `creature_template` SET `exp`=2, `unit_class`=8, `lootid`=28189,`mingold`=3000, `maxgold`=6500 WHERE `entry`=28189;
|
||||
|
||||
-- Prince Valanar loot "Just an educated guess after watching several videos"
|
||||
DELETE FROM `creature_loot_template` WHERE `entry`=28189;
|
||||
INSERT INTO `creature_loot_template` (`Entry`,`Item`,`Reference`,`Chance`,`QuestRequired`,`LootMode`,`GroupId`,`MinCount`,`MaxCount`,`Comment`) VALUES
|
||||
(28189, 33373, 0, 10, 0, 1, 1, 1, 1, 'Fur-lined-belt'),
|
||||
(28189, 33374, 0, 10, 0, 1, 1, 1, 1, 'Fur-lined-boots'),
|
||||
(28189, 33375, 0, 10, 0, 1, 1, 1, 1, 'Fur-lined-bracers'),
|
||||
(28189, 33376, 0, 10, 0, 1, 1, 1, 1, 'Fur-lined-gloves'),
|
||||
(28189, 33377, 0, 10, 0, 1, 1, 1, 1, 'Fur-lined-pants'),
|
||||
(28189, 33470, 0, 50, 0, 1, 2, 1, 3, 'Frostweave Cloth');
|
||||
|
||||
-- creature Thassarian kill should not give XP
|
||||
UPDATE `creature_template` SET `flags_extra`=64 WHERE `entry`=26170;
|
||||
-- High Deathpriest Isidorus should constantly play beg emote
|
||||
UPDATE `creature_addon` SET `emote`=20 WHERE `guid`=101355;
|
||||
|
||||
-- Condition for source Spell implicit target condition type Object entry guid
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=46685;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
(13, 1, 46685, 0, 0, 31, 0, 3, 26173, 0, 0, 0, 0, '', 'Spell Borean Tundra - Quest - Thassarian Flay (effect 0) will hit the potential target of the spell if target is unit Tanathal.');
|
||||
@@ -1428,10 +1428,670 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/*######
|
||||
## Quest 12019: Last Rites
|
||||
######*/
|
||||
|
||||
// NPC 26170: Thassarian
|
||||
enum Thassarian
|
||||
{
|
||||
EVENT_THASSARIAN_SCRIPT_1 = 1,
|
||||
EVENT_THASSARIAN_SCRIPT_2 = 2,
|
||||
EVENT_THASSARIAN_SCRIPT_3 = 3,
|
||||
EVENT_THASSARIAN_SCRIPT_4 = 4,
|
||||
EVENT_THASSARIAN_SCRIPT_5 = 5,
|
||||
EVENT_THASSARIAN_SCRIPT_6 = 6,
|
||||
EVENT_THASSARIAN_SCRIPT_7 = 7,
|
||||
EVENT_THASSARIAN_SCRIPT_8 = 8,
|
||||
EVENT_THASSARIAN_SCRIPT_9 = 9,
|
||||
EVENT_THASSARIAN_SCRIPT_10 = 10,
|
||||
EVENT_THASSARIAN_SCRIPT_11 = 11,
|
||||
EVENT_THASSARIAN_SCRIPT_12 = 12,
|
||||
EVENT_THASSARIAN_SCRIPT_13 = 13,
|
||||
EVENT_THASSARIAN_SCRIPT_14 = 14,
|
||||
EVENT_THASSARIAN_SCRIPT_15 = 15,
|
||||
EVENT_THASSARIAN_SCRIPT_16 = 16,
|
||||
EVENT_THASSARIAN_SCRIPT_17 = 17,
|
||||
EVENT_THASSARIAN_SCRIPT_18 = 18,
|
||||
EVENT_THASSARIAN_SCRIPT_19 = 19,
|
||||
EVENT_THASSARIAN_SCRIPT_20 = 20,
|
||||
EVENT_THASSARIAN_SCRIPT_21 = 21,
|
||||
EVENT_THASSARIAN_SCRIPT_22 = 22,
|
||||
EVENT_THASSARIAN_SCRIPT_23 = 23,
|
||||
EVENT_THASSARIAN_SCRIPT_24 = 24,
|
||||
EVENT_THASSARIAN_SCRIPT_25 = 25,
|
||||
EVENT_THASSARIAN_SCRIPT_26 = 26,
|
||||
EVENT_THASSARIAN_SCRIPT_27 = 27,
|
||||
EVENT_THASSARIAN_SCRIPT_28 = 28,
|
||||
EVENT_THASSARIAN_SCRIPT_29 = 29,
|
||||
EVENT_THASSARIAN_CAST = 30,
|
||||
FACTION_UNDEAD_SCOURGE = 974,
|
||||
FACTION_VALIANCE_EXPEDITION_7 = 1974,
|
||||
FACTION_UNDEAD_SCOURGE_9 = 1988,
|
||||
NPC_IMAGE_LICH_KING = 26203,
|
||||
NPC_COUNSELOR_TALBOT = 25301,
|
||||
NPC_PRINCE_VALANAR = 28189,
|
||||
NPC_GENERAL_ARLOS = 25250,
|
||||
NPC_LERYSSA = 25251,
|
||||
NPC_TANATHAL = 26173,
|
||||
SPELL_THASSARIAN_FLAY = 46685,
|
||||
SPELL_TRANSFORM_VALANAR = 46753,
|
||||
SPELL_BLOOD_PRESENCE = 50995,
|
||||
SAY_THASSARIAN_1 = 0,
|
||||
SAY_THASSARIAN_2 = 1,
|
||||
SAY_THASSARIAN_3 = 2,
|
||||
SAY_THASSARIAN_4 = 3,
|
||||
SAY_THASSARIAN_5 = 4,
|
||||
SAY_THASSARIAN_6 = 5,
|
||||
SAY_THASSARIAN_7 = 6,
|
||||
SAY_TALBOT_1 = 0,
|
||||
SAY_TALBOT_2 = 1,
|
||||
SAY_TALBOT_3 = 2,
|
||||
SAY_TALBOT_4 = 3,
|
||||
SAY_LICH_1 = 0,
|
||||
SAY_LICH_2 = 1,
|
||||
SAY_LICH_3 = 2,
|
||||
SAY_ARLOS_1 = 0,
|
||||
SAY_ARLOS_2 = 1,
|
||||
SAY_LERYSSA_1 = 0,
|
||||
SAY_LERYSSA_2 = 1,
|
||||
SAY_LERYSSA_3 = 2,
|
||||
SAY_LERYSSA_4 = 3,
|
||||
PATH_THASSARIAN = 1013030,
|
||||
PATH_ARTHAS = 1013031,
|
||||
PATH_TALBOT = 1013032,
|
||||
PATH_ARLOS = 1013033,
|
||||
PATH_LERYSSA = 1013034
|
||||
};
|
||||
|
||||
class npc_thassarian : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_thassarian() : CreatureScript("npc_thassarian") {}
|
||||
|
||||
struct npc_thassarianAI : public ScriptedAI
|
||||
{
|
||||
npc_thassarianAI(Creature* creature) : ScriptedAI(creature){}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_CAST, 1000);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
_events.Update(diff);
|
||||
|
||||
if (uint32 eventId = _events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_THASSARIAN_CAST:
|
||||
{
|
||||
if (Unit* tanathal = me->FindNearestCreature(NPC_TANATHAL, 10.0f))
|
||||
{
|
||||
me->CastSpell(tanathal, SPELL_THASSARIAN_FLAY);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private:
|
||||
EventMap _events;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return new npc_thassarianAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
class npc_thassarian2 : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_thassarian2() : CreatureScript("npc_thassarian2") {}
|
||||
|
||||
struct npc_thassarian2AI : public ScriptedAI
|
||||
{
|
||||
npc_thassarian2AI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
_arthasGUID.Clear();
|
||||
_talbotGUID.Clear();
|
||||
_leryssaGUID.Clear();
|
||||
_arlosGUID.Clear();
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
me->setFaction(FACTION_VALIANCE_EXPEDITION_7);
|
||||
me->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
|
||||
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
|
||||
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void SetData(uint32 /*type*/, uint32 data) override
|
||||
{
|
||||
switch (data)
|
||||
{
|
||||
case NPC_LERYSSA:
|
||||
{
|
||||
if (Creature* arlos = ObjectAccessor::GetCreature(*me, _arlosGUID))
|
||||
{
|
||||
arlos->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_STUN);
|
||||
}
|
||||
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
|
||||
{
|
||||
leryssa->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_STUN);
|
||||
leryssa->SetOrientation(4.537856f);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_8, 1000);
|
||||
break;
|
||||
}
|
||||
case NPC_COUNSELOR_TALBOT:
|
||||
{
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_18, 0);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MovementInform(uint32 type, uint32 param) override
|
||||
{
|
||||
if (type == WAYPOINT_MOTION_TYPE && param == 2)
|
||||
{
|
||||
me->SetWalk(false);
|
||||
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H);
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_1, 2000);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
_events.Update(diff);
|
||||
|
||||
if (uint32 eventId = _events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_THASSARIAN_SCRIPT_1:
|
||||
// Summon Arthas and Talbot
|
||||
if (Creature* arthas = me->SummonCreature(NPC_IMAGE_LICH_KING, 3729.4614f, 3520.386f, 473.4048f, 1.361f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000))
|
||||
{
|
||||
_arthasGUID = arthas->GetGUID();
|
||||
arthas->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
arthas->SetReactState(REACT_PASSIVE);
|
||||
arthas->SetWalk(true);
|
||||
}
|
||||
if (Creature* talbot = me->SummonCreature(NPC_COUNSELOR_TALBOT, 3748.7627f, 3614.0374f, 473.4048f, 4.5553f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000))
|
||||
{
|
||||
_talbotGUID = talbot->GetGUID();
|
||||
talbot->SetWalk(true);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_2, 1000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_2:
|
||||
// Arthas load path
|
||||
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
|
||||
{
|
||||
arthas->GetMotionMaster()->MovePath(PATH_ARTHAS, false);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_3, 1000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_3:
|
||||
// Talbot load path
|
||||
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
|
||||
{
|
||||
talbot->GetMotionMaster()->MovePath(PATH_TALBOT, false);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_4, 20000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_4:
|
||||
// Talbot transform and knell
|
||||
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
|
||||
{
|
||||
talbot->CastSpell(talbot, SPELL_TRANSFORM_VALANAR);
|
||||
talbot->UpdateEntry(NPC_PRINCE_VALANAR);
|
||||
talbot->SetFullHealth();
|
||||
talbot->setFaction(FACTION_UNDEAD_SCOURGE);
|
||||
talbot->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
talbot->SetReactState(REACT_PASSIVE);
|
||||
talbot->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_5, 7000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_5:
|
||||
// Talbot say text 1
|
||||
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
|
||||
{
|
||||
talbot->AI()->Talk(SAY_TALBOT_1);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_6, 9000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_6:
|
||||
// Summon General Arlos and Leryssa
|
||||
if (Creature* arlos = me->SummonCreature(NPC_GENERAL_ARLOS, 3746.2825f, 3616.3699f, 473.4048f, 4.5029f, TEMPSUMMON_CORPSE_TIMED_DESPAWN))
|
||||
{
|
||||
_arlosGUID = arlos->GetGUID();
|
||||
arlos->SetWalk(true);
|
||||
arlos->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
arlos->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
|
||||
arlos->GetMotionMaster()->MovePath(PATH_ARLOS, false);
|
||||
}
|
||||
if (Creature* leryssa = me->SummonCreature(NPC_LERYSSA, 3751.0986f, 3614.9219f, 473.4048f, 4.5029f, TEMPSUMMON_CORPSE_TIMED_DESPAWN))
|
||||
{
|
||||
_leryssaGUID = leryssa->GetGUID();
|
||||
leryssa->SetWalk(true);
|
||||
leryssa->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
leryssa->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
|
||||
leryssa->GetMotionMaster()->MovePath(PATH_LERYSSA, false);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_7, 7000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_7:
|
||||
// Talbot say text 2
|
||||
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
|
||||
{
|
||||
talbot->AI()->Talk(SAY_TALBOT_2);
|
||||
}
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_8:
|
||||
// Thassarian say text 1 and move to location
|
||||
Talk(SAY_THASSARIAN_1);
|
||||
me->SetWalk(false);
|
||||
me->GetMotionMaster()->MovePoint(0, 3722.527f, 3567.2583f, 477.44086f);
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_9, 7000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_9:
|
||||
// Thassarian say text 2
|
||||
Talk(SAY_THASSARIAN_2);
|
||||
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_10, 6000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_10:
|
||||
// Arthas turn to Thassarian and Talbot stand
|
||||
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
|
||||
{
|
||||
arthas->SetFacingToObject(me);
|
||||
}
|
||||
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
|
||||
{
|
||||
talbot->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_11, 4000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_11:
|
||||
// Arthas say text 2
|
||||
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
|
||||
{
|
||||
arthas->AI()->Talk(SAY_LICH_2);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_12, 18000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_12:
|
||||
// Thassarian say text 3
|
||||
Talk(SAY_THASSARIAN_3);
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_13, 10000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_13:
|
||||
// Talbot say text 3
|
||||
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
|
||||
{
|
||||
talbot->AI()->Talk(SAY_TALBOT_3);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_14, 5000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_14:
|
||||
// Arthas turn to Talbot say text 3
|
||||
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
|
||||
{
|
||||
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
|
||||
{
|
||||
arthas->SetFacingToObject(talbot);
|
||||
}
|
||||
arthas->AI()->Talk(SAY_LICH_3);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_15, 5000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_15:
|
||||
// Arthas turn to me and emote
|
||||
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
|
||||
{
|
||||
arthas->SetFacingToObject(me);
|
||||
arthas->HandleEmoteCommand(EMOTE_ONESHOT_POINT);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_16, 5000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_16:
|
||||
// Arthas despawn
|
||||
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
|
||||
{
|
||||
arthas->RemoveFromWorld();
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_17, 3000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_17:
|
||||
// Talbot say text 4 and attack
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
|
||||
{
|
||||
talbot->AI()->Talk(SAY_TALBOT_4);
|
||||
talbot->setFaction(FACTION_UNDEAD_SCOURGE_9);
|
||||
talbot->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
talbot->SetReactState(REACT_AGGRESSIVE);
|
||||
talbot->Attack(me, false);
|
||||
}
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_18:
|
||||
// Arlos say text 1
|
||||
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H);
|
||||
if (Creature* arlos = ObjectAccessor::GetCreature(*me, _arlosGUID))
|
||||
{
|
||||
arlos->AI()->Talk(SAY_ARLOS_1);
|
||||
arlos->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
|
||||
arlos->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
}
|
||||
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
|
||||
{
|
||||
leryssa->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_19, 3000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_19:
|
||||
// Leryssa set facing to me
|
||||
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
|
||||
if (Creature* leryssa = me->FindNearestCreature(NPC_LERYSSA, 50.0f, true))
|
||||
{
|
||||
_leryssaGUID = leryssa->GetGUID();
|
||||
leryssa->SetFacingToObject(me);
|
||||
me->SetFacingToObject(leryssa);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_20, 3000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_20:
|
||||
// Arlos say text 2 and die. Leryssa say text 1
|
||||
if (Creature* arlos = me->FindNearestCreature(NPC_GENERAL_ARLOS, 50.0f, true))
|
||||
{
|
||||
_arlosGUID = arlos->GetGUID();
|
||||
arlos->AI()->Talk(SAY_ARLOS_2);
|
||||
arlos->SetStandState(UNIT_STAND_STATE_DEAD);
|
||||
}
|
||||
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
|
||||
{
|
||||
leryssa->AI()->Talk(SAY_LERYSSA_1);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_21, 5000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_21:
|
||||
// Thassarian say text 4
|
||||
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
Talk(SAY_THASSARIAN_4);
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_22, 3000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_22:
|
||||
// Leryssa run to Thassarian
|
||||
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
|
||||
{
|
||||
leryssa->SetWalk(false);
|
||||
leryssa->MonsterMoveWithSpeed(3726.751f, 3568.1633f, 477.44086f, leryssa->GetSpeed(MOVE_RUN));
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_23, 2000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_23:
|
||||
// Leryssa say text 2
|
||||
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
|
||||
{
|
||||
leryssa->AI()->Talk(SAY_LERYSSA_2);
|
||||
leryssa->SetStandState(UNIT_STAND_STATE_SIT);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_24, 5000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_24:
|
||||
// Thassarian say text 5
|
||||
Talk(SAY_THASSARIAN_5);
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_25, 10000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_25:
|
||||
// Leryssa say text 3
|
||||
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
|
||||
{
|
||||
leryssa->AI()->Talk(SAY_LERYSSA_3);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_26, 12000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_26:
|
||||
// Thassarian say text 6
|
||||
Talk(SAY_THASSARIAN_6);
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_27, 11000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_27:
|
||||
// Leryssa say text 4
|
||||
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
|
||||
{
|
||||
leryssa->AI()->Talk(SAY_LERYSSA_4);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_28, 12000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_28:
|
||||
// Thassarian say text 7
|
||||
Talk(SAY_THASSARIAN_7);
|
||||
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_29, 35000);
|
||||
break;
|
||||
case EVENT_THASSARIAN_SCRIPT_29:
|
||||
Cleanup();
|
||||
me->DespawnOrUnsummon(30000ms, 120s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!UpdateVictim())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Cleanup();
|
||||
me->DespawnOrUnsummon(1000ms, 120s);
|
||||
}
|
||||
|
||||
void Cleanup()
|
||||
{
|
||||
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
|
||||
{
|
||||
talbot->RemoveFromWorld();
|
||||
}
|
||||
|
||||
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
|
||||
{
|
||||
leryssa->RemoveFromWorld();
|
||||
}
|
||||
|
||||
if (Creature* arlos = ObjectAccessor::GetCreature(*me, _arlosGUID))
|
||||
{
|
||||
arlos->RemoveFromWorld();
|
||||
}
|
||||
|
||||
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
|
||||
{
|
||||
arthas->RemoveFromWorld();
|
||||
}
|
||||
}
|
||||
|
||||
void sGossipHello(Player* /*player*/) override
|
||||
{
|
||||
if (!me->HasAura(SPELL_BLOOD_PRESENCE))
|
||||
{
|
||||
DoCastSelf(SPELL_BLOOD_PRESENCE);
|
||||
}
|
||||
}
|
||||
|
||||
void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override
|
||||
{
|
||||
if (action == 0)
|
||||
{
|
||||
_playerGUID = player->GetGUID();
|
||||
CloseGossipMenuFor(player);
|
||||
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||
me->GetMotionMaster()->MovePath(PATH_THASSARIAN, false);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
ObjectGuid _playerGUID;
|
||||
ObjectGuid _arthasGUID;
|
||||
ObjectGuid _talbotGUID;
|
||||
ObjectGuid _leryssaGUID;
|
||||
ObjectGuid _arlosGUID;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return new npc_thassarian2AI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
// NPC 25251: Leryssa
|
||||
class npc_leryssa : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_leryssa() : CreatureScript("npc_leryssa") {}
|
||||
|
||||
struct npc_leryssaAI : public ScriptedAI
|
||||
{
|
||||
npc_leryssaAI(Creature* creature) : ScriptedAI(creature) {}
|
||||
|
||||
void MovementInform(uint32 type, uint32 param) override
|
||||
{
|
||||
if (type == WAYPOINT_MOTION_TYPE && param == 2)
|
||||
{
|
||||
if (me->IsSummon())
|
||||
{
|
||||
if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
|
||||
{
|
||||
summoner->ToCreature()->AI()->SetData(1, NPC_LERYSSA);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return new npc_leryssaAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
// NPC 25301: Counselor Talbot
|
||||
enum CounselorTalbot
|
||||
{
|
||||
AREA_LAST_RITES = 4128,
|
||||
SPELL_DEFLECTION = 51009,
|
||||
SPELL_SOUL_BLAST = 50992,
|
||||
SPELL_VAMPIRIC_BOLT = 51016,
|
||||
EVENT_DEFLECTION = 1,
|
||||
EVENT_SOUL_BLAST = 2,
|
||||
EVENT_VAMPIRIC_BOLT = 3
|
||||
};
|
||||
|
||||
class npc_counselor_talbot : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_counselor_talbot() : CreatureScript("npc_counselor_talbot") {}
|
||||
|
||||
struct npc_counselor_talbotAI : public ScriptedAI
|
||||
{
|
||||
npc_counselor_talbotAI(Creature* creature) : ScriptedAI(creature) {}
|
||||
|
||||
void Reset() override {}
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
{
|
||||
_events.ScheduleEvent(EVENT_DEFLECTION, 10000, 20000);
|
||||
_events.ScheduleEvent(EVENT_SOUL_BLAST, 4000, 6000);
|
||||
_events.ScheduleEvent(EVENT_VAMPIRIC_BOLT, 0);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (me->GetAreaId() == AREA_LAST_RITES)
|
||||
{
|
||||
_events.Update(diff);
|
||||
|
||||
if (uint32 eventId = _events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_DEFLECTION:
|
||||
DoCastSelf(SPELL_DEFLECTION);
|
||||
_events.ScheduleEvent(EVENT_DEFLECTION, 10000, 20000);
|
||||
break;
|
||||
case EVENT_SOUL_BLAST:
|
||||
DoCastVictim(SPELL_SOUL_BLAST);
|
||||
_events.ScheduleEvent(EVENT_SOUL_BLAST, 4000, 6000);
|
||||
break;
|
||||
case EVENT_VAMPIRIC_BOLT:
|
||||
DoCastVictim(SPELL_VAMPIRIC_BOLT);
|
||||
_events.ScheduleEvent(EVENT_VAMPIRIC_BOLT, 3000, 4000);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
if (me->IsSummon())
|
||||
{
|
||||
if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
|
||||
{
|
||||
summoner->ToCreature()->AI()->SetData(1, NPC_COUNSELOR_TALBOT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return new npc_counselor_talbotAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_borean_tundra()
|
||||
{
|
||||
// Ours
|
||||
new spell_q11919_q11940_drake_hunt();
|
||||
new npc_thassarian();
|
||||
new npc_thassarian2();
|
||||
new npc_leryssa();
|
||||
new npc_counselor_talbot();
|
||||
|
||||
// Theirs
|
||||
new npc_sinkhole_kill_credit();
|
||||
|
||||
Reference in New Issue
Block a user