mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 10:26:28 +01:00
Scripts/Icecrown: Small event of the down Nerub'ar Broodkeep (#25410)
Updates #25193 Co-authored-by: Keader Co-authored-by: Ovahlord (sucker)
This commit is contained in:
11
sql/updates/world/3.3.5/2020_09_08_01_world.sql
Normal file
11
sql/updates/world/3.3.5/2020_09_08_01_world.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
-- Nerub'ar broodkeep
|
||||
DELETE FROM `areatrigger_scripts` WHERE `entry` IN (5611,5612);
|
||||
INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES
|
||||
(5611, 'at_icc_nerubar_broodkeeper'),
|
||||
(5612, 'at_icc_nerubar_broodkeeper');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=36725;
|
||||
UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_icc_nerubar_broodkeeper' WHERE `entry`=36725;
|
||||
UPDATE `creature_template` SET `flags_extra`=512 WHERE `entry` IN (36725,38058);
|
||||
UPDATE `creature_template_addon` SET `bytes1`=0 WHERE `entry` IN (36725,38058);
|
||||
UPDATE `creature_template_movement` SET `Flight`=0, `Ground`=1 WHERE `CreatureId` IN (36725,38058);
|
||||
@@ -36,36 +36,36 @@
|
||||
enum ICCTexts
|
||||
{
|
||||
// Highlord Tirion Fordring (at Light's Hammer)
|
||||
SAY_TIRION_INTRO_1 = 0,
|
||||
SAY_TIRION_INTRO_2 = 1,
|
||||
SAY_TIRION_INTRO_3 = 2,
|
||||
SAY_TIRION_INTRO_4 = 3,
|
||||
SAY_TIRION_INTRO_H_5 = 4,
|
||||
SAY_TIRION_INTRO_A_5 = 5,
|
||||
SAY_TIRION_INTRO_1 = 0,
|
||||
SAY_TIRION_INTRO_2 = 1,
|
||||
SAY_TIRION_INTRO_3 = 2,
|
||||
SAY_TIRION_INTRO_4 = 3,
|
||||
SAY_TIRION_INTRO_H_5 = 4,
|
||||
SAY_TIRION_INTRO_A_5 = 5,
|
||||
|
||||
// The Lich King (at Light's Hammer)
|
||||
SAY_LK_INTRO_1 = 0,
|
||||
SAY_LK_INTRO_2 = 1,
|
||||
SAY_LK_INTRO_3 = 2,
|
||||
SAY_LK_INTRO_4 = 3,
|
||||
SAY_LK_INTRO_5 = 4,
|
||||
SAY_LK_INTRO_1 = 0,
|
||||
SAY_LK_INTRO_2 = 1,
|
||||
SAY_LK_INTRO_3 = 2,
|
||||
SAY_LK_INTRO_4 = 3,
|
||||
SAY_LK_INTRO_5 = 4,
|
||||
|
||||
// Highlord Bolvar Fordragon (at Light's Hammer)
|
||||
SAY_BOLVAR_INTRO_1 = 0,
|
||||
SAY_BOLVAR_INTRO_1 = 0,
|
||||
|
||||
// High Overlord Saurfang (at Light's Hammer)
|
||||
SAY_SAURFANG_INTRO_1 = 15,
|
||||
SAY_SAURFANG_INTRO_2 = 16,
|
||||
SAY_SAURFANG_INTRO_3 = 17,
|
||||
SAY_SAURFANG_INTRO_4 = 18,
|
||||
SAY_SAURFANG_INTRO_1 = 15,
|
||||
SAY_SAURFANG_INTRO_2 = 16,
|
||||
SAY_SAURFANG_INTRO_3 = 17,
|
||||
SAY_SAURFANG_INTRO_4 = 18,
|
||||
|
||||
// Muradin Bronzebeard (at Light's Hammer)
|
||||
SAY_MURADIN_INTRO_1 = 13,
|
||||
SAY_MURADIN_INTRO_2 = 14,
|
||||
SAY_MURADIN_INTRO_3 = 15,
|
||||
SAY_MURADIN_INTRO_1 = 13,
|
||||
SAY_MURADIN_INTRO_2 = 14,
|
||||
SAY_MURADIN_INTRO_3 = 15,
|
||||
|
||||
// Deathbound Ward
|
||||
SAY_TRAP_ACTIVATE = 0,
|
||||
SAY_TRAP_ACTIVATE = 0,
|
||||
|
||||
// Rotting Frost Giant
|
||||
EMOTE_DEATH_PLAGUE_WARNING = 0,
|
||||
@@ -74,61 +74,67 @@ enum ICCTexts
|
||||
enum ICCSpells
|
||||
{
|
||||
// Rotting Frost Giant
|
||||
SPELL_DEATH_PLAGUE = 72879,
|
||||
SPELL_DEATH_PLAGUE_AURA = 72865,
|
||||
SPELL_RECENTLY_INFECTED = 72884,
|
||||
SPELL_DEATH_PLAGUE_KILL = 72867,
|
||||
SPELL_STOMP = 64652,
|
||||
SPELL_ARCTIC_BREATH = 72848,
|
||||
SPELL_DEATH_PLAGUE = 72879,
|
||||
SPELL_DEATH_PLAGUE_AURA = 72865,
|
||||
SPELL_RECENTLY_INFECTED = 72884,
|
||||
SPELL_DEATH_PLAGUE_KILL = 72867,
|
||||
SPELL_STOMP = 64652,
|
||||
SPELL_ARCTIC_BREATH = 72848,
|
||||
|
||||
// Frost Freeze Trap
|
||||
SPELL_COLDFLAME_JETS = 70460,
|
||||
SPELL_COLDFLAME_JETS = 70460,
|
||||
|
||||
// Alchemist Adrianna
|
||||
SPELL_HARVEST_BLIGHT_SPECIMEN = 72155,
|
||||
SPELL_HARVEST_BLIGHT_SPECIMEN = 72155,
|
||||
|
||||
// Invisible Stalker (Float, Uninteractible, LargeAOI)
|
||||
SPELL_SOUL_MISSILE = 72585,
|
||||
SPELL_SOUL_MISSILE = 72585,
|
||||
|
||||
// Empowering Blood Orb
|
||||
SPELL_EMPOWERED_BLOOD_2 = 70232,
|
||||
SPELL_EMPOWERED_BLOOD_3 = 70304,
|
||||
SPELL_EMPOWERED_BLOOD_4 = 70320,
|
||||
SPELL_ORB_CONTROLLER_ACTIVE = 70293,
|
||||
SPELL_EMPOWERED_BLOOD_2 = 70232,
|
||||
SPELL_EMPOWERED_BLOOD_3 = 70304,
|
||||
SPELL_EMPOWERED_BLOOD_4 = 70320,
|
||||
SPELL_ORB_CONTROLLER_ACTIVE = 70293,
|
||||
|
||||
// Darkfallen Generic
|
||||
SPELL_BLOOD_ORB_VISUAL = 72099,
|
||||
SPELL_SIPHON_ESSENCE = 70299,
|
||||
SPELL_BLOOD_ORB_VISUAL = 72099,
|
||||
SPELL_SIPHON_ESSENCE = 70299,
|
||||
|
||||
// Darkfallen Blood Knight
|
||||
SPELL_VAMPIRIC_AURA = 71736,
|
||||
SPELL_BLOOD_MIRROR = 70450,
|
||||
SPELL_BLOOD_MIRROR_2 = 70451,
|
||||
SPELL_VAMPIRIC_AURA = 71736,
|
||||
SPELL_BLOOD_MIRROR = 70450,
|
||||
SPELL_BLOOD_MIRROR_2 = 70451,
|
||||
SPELL_BLOOD_MIRROR_DAMAGE_SHARE = 70445,
|
||||
SPELL_UNHOLY_STRIKE = 70437,
|
||||
SPELL_UNHOLY_STRIKE = 70437,
|
||||
|
||||
// Darkfallen Noble
|
||||
SPELL_SHADOW_BOLT = 72960,
|
||||
SPELL_CHAINS_OF_SHADOW = 72960,
|
||||
SPELL_SHADOW_BOLT = 72960,
|
||||
SPELL_CHAINS_OF_SHADOW = 72960,
|
||||
|
||||
// Darkfallen Archmage
|
||||
SPELL_FIREBALL = 70409,
|
||||
SPELL_AMPLIFY_MAGIC = 70408,
|
||||
SPELL_BLAST_WAVE = 70407,
|
||||
SPELL_POLYMORPH_ALLY = 72106,
|
||||
SPELL_POLYMORPH = 70410,
|
||||
SPELL_FIREBALL = 70409,
|
||||
SPELL_AMPLIFY_MAGIC = 70408,
|
||||
SPELL_BLAST_WAVE = 70407,
|
||||
SPELL_POLYMORPH_ALLY = 72106,
|
||||
SPELL_POLYMORPH = 70410,
|
||||
|
||||
// Darkfallen Advisor
|
||||
SPELL_LICH_SLAP = 72057,
|
||||
SPELL_SHROUD_OF_SPELL_WARDING = 72066,
|
||||
SPELL_LICH_SLAP = 72057,
|
||||
SPELL_SHROUD_OF_SPELL_WARDING = 72066,
|
||||
|
||||
// Vampiric Fiend
|
||||
SPELL_DISEASE_CLOUD = 41290,
|
||||
SPELL_LEECHING_ROOT = 70671,
|
||||
SPELL_DISEASE_CLOUD = 41290,
|
||||
SPELL_LEECHING_ROOT = 70671,
|
||||
|
||||
// Darkfallen Tactician
|
||||
SPELL_SHADOWSTEP = 70431,
|
||||
SPELL_BLOOD_SAP = 70432
|
||||
SPELL_SHADOWSTEP = 70431,
|
||||
SPELL_BLOOD_SAP = 70432,
|
||||
|
||||
// Nerubar broodkeeper
|
||||
SPELL_WEB_BEAM = 69887,
|
||||
SPELL_CRYPT_SCARABS = 70965,
|
||||
SPELL_WEB_WRAP = 70980,
|
||||
SPELL_DARK_MENDING = 71020
|
||||
};
|
||||
|
||||
enum ICCTimedEventIds
|
||||
@@ -159,6 +165,11 @@ enum ICCTimedEventIds
|
||||
EVENT_MURADIN_INTRO_5,
|
||||
EVENT_MURADIN_RUN,
|
||||
|
||||
// Nerub'ar Broodkeeper
|
||||
EVENT_CRYPT_SCARABS,
|
||||
EVENT_WEB_WRAP,
|
||||
EVENT_DARK_MENDING,
|
||||
|
||||
// Rotting Frost Giant
|
||||
EVENT_DEATH_PLAGUE,
|
||||
EVENT_STOMP,
|
||||
@@ -194,8 +205,9 @@ enum ICCEventIds
|
||||
|
||||
enum ICCMisc
|
||||
{
|
||||
GOSSIP_MENUID_ALLY = 11204,
|
||||
GOSSIP_MENUID_HORDE = 11207
|
||||
GOSSIP_MENUID_ALLY = 11204,
|
||||
GOSSIP_MENUID_HORDE = 11207,
|
||||
POINT_LAND = 1,
|
||||
};
|
||||
|
||||
// at Light's Hammer
|
||||
@@ -501,6 +513,9 @@ class npc_rotting_frost_giant : public CreatureScript
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
@@ -1043,6 +1058,105 @@ struct npc_darkfallen_tactician : public DarkFallenAI
|
||||
}
|
||||
};
|
||||
|
||||
struct npc_icc_nerubar_broodkeeper : public ScriptedAI
|
||||
{
|
||||
npc_icc_nerubar_broodkeeper(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
// We set the anim tier and flags manually because we don't need them anymore once the spiders are down
|
||||
void InitializeAI() override
|
||||
{
|
||||
me->SetDisableGravity(true);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_CUSTOM_SPELL_03);
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_events.Reset();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
_events.ScheduleEvent(EVENT_CRYPT_SCARABS, 1s, 3s);
|
||||
_events.ScheduleEvent(EVENT_DARK_MENDING, 5s);
|
||||
_events.ScheduleEvent(EVENT_WEB_WRAP, 20s);
|
||||
}
|
||||
|
||||
void DoAction(int32 action) override
|
||||
{
|
||||
if (action != ACTION_NERUBAR_FALL)
|
||||
return;
|
||||
|
||||
DoCastSelf(SPELL_WEB_BEAM);
|
||||
float x, y, z;
|
||||
me->GetPosition(x, y);
|
||||
z = me->GetFloorZ();
|
||||
me->SetHomePosition(x, y, z, me->GetOrientation());
|
||||
|
||||
me->GetMotionMaster()->MoveLand(POINT_LAND, Position(x, y, z));
|
||||
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
|
||||
}
|
||||
|
||||
void MovementInform(uint32 type, uint32 id) override
|
||||
{
|
||||
if (type == EFFECT_MOTION_TYPE && id == POINT_LAND)
|
||||
{
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetDisableGravity(false);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
_events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_CRYPT_SCARABS:
|
||||
DoCastVictim(SPELL_CRYPT_SCARABS);
|
||||
_events.Repeat(4s, 10s);
|
||||
break;
|
||||
case EVENT_DARK_MENDING:
|
||||
{
|
||||
// Select a friendly target between 1% and 75% hp
|
||||
Unit* target = nullptr;
|
||||
Trinity::MostHPPercentMissingInRange u_check(me, 40.0f, 1, 75);
|
||||
Trinity::UnitLastSearcher<Trinity::MostHPPercentMissingInRange> searcher(me, target, u_check);
|
||||
Cell::VisitGridObjects(me, searcher, 40.0f);
|
||||
|
||||
if (target)
|
||||
DoCast(target, SPELL_DARK_MENDING);
|
||||
_events.Repeat(3s, 10s);
|
||||
break;
|
||||
}
|
||||
case EVENT_WEB_WRAP:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f))
|
||||
DoCast(target, SPELL_WEB_WRAP);
|
||||
_events.Repeat(16s, 20s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
};
|
||||
|
||||
struct go_empowering_blood_orb : public GameObjectAI
|
||||
{
|
||||
go_empowering_blood_orb(GameObject* go) : GameObjectAI(go) { }
|
||||
@@ -1547,6 +1661,24 @@ class at_icc_start_blood_quickening : public AreaTriggerScript
|
||||
}
|
||||
};
|
||||
|
||||
class at_icc_nerubar_broodkeeper : public OnlyOnceAreaTriggerScript
|
||||
{
|
||||
public:
|
||||
at_icc_nerubar_broodkeeper() : OnlyOnceAreaTriggerScript("at_icc_nerubar_broodkeeper") { }
|
||||
|
||||
bool TryHandleOnce(Player* player, AreaTriggerEntry const* areaTrigger) override
|
||||
{
|
||||
if (InstanceScript* instance = player->GetInstanceScript())
|
||||
{
|
||||
if (player->IsGameMaster())
|
||||
return false;
|
||||
|
||||
instance->SetData(DATA_NERUBAR_BROODKEEPER_EVENT, areaTrigger->ID);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_icecrown_citadel()
|
||||
{
|
||||
new npc_highlord_tirion_fordring_lh();
|
||||
@@ -1562,6 +1694,7 @@ void AddSC_icecrown_citadel()
|
||||
RegisterIcecrownCitadelCreatureAI(npc_darkfallen_archmage);
|
||||
RegisterIcecrownCitadelCreatureAI(npc_darkfallen_advisor);
|
||||
RegisterIcecrownCitadelCreatureAI(npc_darkfallen_tactician);
|
||||
RegisterIcecrownCitadelCreatureAI(npc_icc_nerubar_broodkeeper);
|
||||
RegisterGameObjectAI(go_empowering_blood_orb);
|
||||
RegisterSpellScript(spell_icc_empowered_blood);
|
||||
RegisterSpellScript(spell_icc_empowered_blood_3);
|
||||
@@ -1576,4 +1709,5 @@ void AddSC_icecrown_citadel()
|
||||
new at_icc_saurfang_portal();
|
||||
new at_icc_shutdown_traps();
|
||||
new at_icc_start_blood_quickening();
|
||||
new at_icc_nerubar_broodkeeper();
|
||||
}
|
||||
|
||||
@@ -118,7 +118,8 @@ enum ICDataTypes
|
||||
DATA_BLOOD_QUEEN_LANA_THEL_COUNCIL = 42,
|
||||
DATA_BLOOD_PRINCE_COUNCIL_INTRO = 43,
|
||||
DATA_SINDRAGOSA_INTRO = 44,
|
||||
DATA_FACTION_BUFF = 45 // used by conditions
|
||||
DATA_FACTION_BUFF = 45, // used by conditions
|
||||
DATA_NERUBAR_BROODKEEPER_EVENT = 46
|
||||
};
|
||||
|
||||
enum ICCreaturesIds
|
||||
@@ -148,6 +149,7 @@ enum ICCreaturesIds
|
||||
NPC_MURADIN_BRONZEBEARD_QUEST = 38607,
|
||||
NPC_UTHER_THE_LIGHTBRINGER_QUEST = 38608,
|
||||
NPC_LADY_SYLVANAS_WINDRUNNER_QUEST = 38609,
|
||||
NPC_NERUBAR_BROODKEEPER = 36725,
|
||||
|
||||
// Weekly quests
|
||||
NPC_INFILTRATOR_MINCHAR = 38471,
|
||||
@@ -477,6 +479,9 @@ enum ICAchievementCriteriaIds
|
||||
|
||||
enum ICSharedActions
|
||||
{
|
||||
// Nerub'ar Broodkeeper event
|
||||
ACTION_NERUBAR_FALL = 1,
|
||||
|
||||
// Icecrown Gunship Battle
|
||||
ACTION_ENEMY_GUNSHIP_TALK = -369390,
|
||||
ACTION_EXIT_SHIP = -369391,
|
||||
@@ -530,9 +535,10 @@ enum ICWorldStatesICC
|
||||
WORLDSTATE_ATTEMPTS_MAX = 4942
|
||||
};
|
||||
|
||||
enum ICAreaIds
|
||||
enum ICMisc
|
||||
{
|
||||
AREA_ICECROWN_CITADEL = 4812
|
||||
AREA_ICECROWN_CITADEL = 4812,
|
||||
AT_NERUBAR_BROODKEEPER = 5611
|
||||
};
|
||||
|
||||
struct Position;
|
||||
|
||||
@@ -212,6 +212,12 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
|
||||
switch (creature->GetEntry())
|
||||
{
|
||||
case NPC_NERUBAR_BROODKEEPER:
|
||||
{
|
||||
uint8 group = (creature->GetPositionX() > -230.0f) ? 0 : 1;
|
||||
nerubarBroodkeepersGUIDs[group].emplace_back(creature->GetGUID());
|
||||
break;
|
||||
}
|
||||
case NPC_LORD_MARROWGAR:
|
||||
LordMarrowgarGUID = creature->GetGUID();
|
||||
break;
|
||||
@@ -1118,6 +1124,14 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
if (!IsFactionBuffActive)
|
||||
DoRemoveAurasDueToSpellOnPlayers(TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG, true, true);
|
||||
break;
|
||||
case DATA_NERUBAR_BROODKEEPER_EVENT:
|
||||
{
|
||||
uint8 group = (data == AT_NERUBAR_BROODKEEPER) ? 0 : 1;
|
||||
for (ObjectGuid guid : nerubarBroodkeepersGUIDs[group])
|
||||
if (Creature* nerubar = instance->GetCreature(guid))
|
||||
nerubar->AI()->DoAction(ACTION_NERUBAR_FALL);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -1538,6 +1552,7 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
bool IsNauseaEligible;
|
||||
bool IsOrbWhispererEligible;
|
||||
bool IsFactionBuffActive;
|
||||
std::array<GuidVector, 2> nerubarBroodkeepersGUIDs;
|
||||
};
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* map) const override
|
||||
|
||||
Reference in New Issue
Block a user