diff options
Diffstat (limited to 'src/server/scripts')
41 files changed, 524 insertions, 641 deletions
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 3cd797d5e00..11417b305a5 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -918,7 +918,7 @@ public: uint32 entry = atoul(e); float x, y, z, o = handler->GetSession()->GetPlayer()->GetOrientation(); - handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, handler->GetSession()->GetPlayer()->GetObjectSize()); + handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, handler->GetSession()->GetPlayer()->GetCombatReach()); if (!i) return handler->GetSession()->GetPlayer()->SummonCreature(entry, x, y, z, o) != nullptr; diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp index afe3b3c2645..f6866734a7c 100644 --- a/src/server/scripts/Commands/cs_group.cpp +++ b/src/server/scripts/Commands/cs_group.cpp @@ -143,7 +143,7 @@ public: // before GM float x, y, z; - gmPlayer->GetClosePoint(x, y, z, player->GetObjectSize()); + gmPlayer->GetClosePoint(x, y, z, player->GetCombatReach()); player->TeleportTo(gmPlayer->GetMapId(), x, y, z, player->GetOrientation()); } diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 1067283431d..23dbd8e3d1a 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -591,7 +591,7 @@ public: // before GM float x, y, z; - handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, target->GetObjectSize()); + handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, target->GetCombatReach()); target->TeleportTo(handler->GetSession()->GetPlayer()->GetMapId(), x, y, z, target->GetOrientation()); PhasingHandler::InheritPhaseShift(target, handler->GetSession()->GetPlayer()); target->UpdateObjectVisibility(); @@ -2201,9 +2201,6 @@ public: case WAYPOINT_MOTION_TYPE: handler->SendSysMessage(LANG_MOVEGENS_WAYPOINT); break; - case ANIMAL_RANDOM_MOTION_TYPE: - handler->SendSysMessage(LANG_MOVEGENS_ANIMAL_RANDOM); - break; case CONFUSED_MOTION_TYPE: handler->SendSysMessage(LANG_MOVEGENS_CONFUSED); break; diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index ac4d8abb366..7a2e6cff30e 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -1457,7 +1457,7 @@ public: // place pet before player float x, y, z; - player->GetClosePoint (x, y, z, creatureTarget->GetObjectSize(), CONTACT_DISTANCE); + player->GetClosePoint (x, y, z, creatureTarget->GetCombatReach(), CONTACT_DISTANCE); pet->Relocate(x, y, z, float(M_PI) - player->GetOrientation()); // set pet to defensive mode by default (some classes can't control controlled pets in fact). diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp index 22efdea4071..c0ae774c5f1 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp @@ -126,7 +126,7 @@ class boss_selin_fireheart : public CreatureScript Crystals.remove(CrystalChosen); float x, y, z; - CrystalChosen->GetClosePoint(x, y, z, me->GetObjectSize(), CONTACT_DISTANCE); + CrystalChosen->GetClosePoint(x, y, z, me->GetCombatReach(), CONTACT_DISTANCE); events.SetPhase(PHASE_DRAIN); me->SetWalk(false); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp index d47bf3c7862..fea8c330b9c 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp @@ -101,7 +101,7 @@ public: FlyBackTimer = 500; break; case 1: - player->GetClosePoint(x, y, z, me->GetObjectSize()); + player->GetClosePoint(x, y, z, me->GetCombatReach()); z += 2.5f; x -= 2.0f; y -= 1.5f; diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h index 9f72ffe8183..c905702d3bc 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h @@ -20,17 +20,9 @@ #define DataHeader "ST" -#define TROLLBOSS1_DEATH 1 -#define TROLLBOSS2_DEATH 2 -#define TROLLBOSS3_DEATH 3 -#define TROLLBOSS4_DEATH 4 -#define TROLLBOSS5_DEATH 5 -#define TROLLBOSS6_DEATH 6 -#define JAMMALAN_DEATH 7 -#define MORPHAZ_DEATH 8 -#define HAZZAS_DEATH 9 -#define ERANIKUS_DEATH 10 -#define ATALALARION_DEATH 11 //optional +enum STEvents +{ + EVENT_STATE = 1 +}; -#define EVENT_STATE 1 #endif diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp index 58690c3a171..71784911f34 100644 --- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp +++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp @@ -539,7 +539,7 @@ public: /// TODO: Remove this once we find a general rule for WorldObject::MovePosition (this spell shouldn't take the Z change into consideration) Unit* caster = GetCaster(); float angle = float(rand_norm()) * static_cast<float>(2 * M_PI); - uint32 dist = caster->GetObjectSize() + GetSpellInfo()->GetEffect(EFFECT_0)->CalcRadius(caster) * (float)rand_norm(); + uint32 dist = caster->GetCombatReach() + GetSpellInfo()->GetEffect(EFFECT_0)->CalcRadius(caster) * (float)rand_norm(); float x = caster->GetPositionX() + dist * std::cos(angle); float y = caster->GetPositionY() + dist * std::sin(angle); diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp index f00f96660a8..9112fd9ccd2 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp @@ -483,15 +483,6 @@ class npc_anubarak_anub_ar_assassin : public CreatureScript { npc_anubarak_anub_ar_assassinAI(Creature* creature) : npc_anubarak_pet_template(creature, false), _backstabTimer(6 * IN_MILLISECONDS) { } - bool IsInBounds(Position const& jumpTo, CreatureBoundary const* boundary) - { - if (!boundary) - return true; - for (AreaBoundary const* it : *boundary) - if (!it->IsWithinBoundary(&jumpTo)) - return false; - return true; - } Position GetRandomPositionAround(Creature* anubarak) { static float DISTANCE_MIN = 10.0f; @@ -508,7 +499,7 @@ class npc_anubarak_anub_ar_assassin : public CreatureScript Position jumpTo; do jumpTo = GetRandomPositionAround(anubarak); - while (!IsInBounds(jumpTo, boundary)); + while (!CreatureAI::IsInBounds(boundary, &jumpTo)); me->GetMotionMaster()->MoveJump(jumpTo, 40.0f, 40.0f); DoCastSelf(SPELL_ASSASSIN_VISUAL, true); } diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp index 1df68607625..ff4343f31fd 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp @@ -146,7 +146,7 @@ class boss_king_dred : public CreatureScript float x, y, z; - me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 10.0f); + me->GetClosePoint(x, y, z, me->GetCombatReach() / 3, 10.0f); me->SummonCreature(RAND(NPC_DRAKKARI_GUTRIPPER, NPC_DRAKKARI_SCYTHECLAW), x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1000); events.ScheduleEvent(EVENT_RAPTOR_CALL, urand(20000, 25000)); break; diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp index c67179d67eb..c78424c0078 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp @@ -131,7 +131,7 @@ class boss_bronjahm : public CreatureScript { summons.Summon(summon); summon->SetReactState(REACT_PASSIVE); - summon->GetMotionMaster()->MoveFollow(me, me->GetObjectSize(), 0.0f); + summon->GetMotionMaster()->MoveFollow(me, me->GetCombatReach(), 0.0f); summon->CastSpell(summon, SPELL_PURPLE_BANISH_VISUAL, true); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 98ee4e6194e..80ab44fe32a 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -790,7 +790,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_DEATHBRINGER_SAURFANG))) { float x, y, z; - deathbringer->GetClosePoint(x, y, z, deathbringer->GetObjectSize()); + deathbringer->GetClosePoint(x, y, z, deathbringer->GetCombatReach()); me->SetWalk(true); me->GetMotionMaster()->MovePoint(POINT_CORPSE, x, y, z); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 99060220471..1ab35165e5a 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -387,7 +387,7 @@ class npc_coldflame : public CreatureScript { float ang = Position::NormalizeOrientation(pos.GetAngle(me)); me->SetOrientation(ang); - owner->GetNearPoint2D(pos.m_positionX, pos.m_positionY, 5.0f - owner->GetObjectSize(), ang); + owner->GetNearPoint2D(pos.m_positionX, pos.m_positionY, 5.0f - owner->GetCombatReach(), ang); } else { @@ -400,7 +400,7 @@ class npc_coldflame : public CreatureScript float ang = Position::NormalizeOrientation(pos.GetAngle(target)); me->SetOrientation(ang); - owner->GetNearPoint2D(pos.m_positionX, pos.m_positionY, 15.0f - owner->GetObjectSize(), ang); + owner->GetNearPoint2D(pos.m_positionX, pos.m_positionY, 15.0f - owner->GetCombatReach(), ang); } me->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), me->GetPositionZ(), me->GetOrientation()); @@ -518,7 +518,7 @@ class spell_marrowgar_coldflame : public SpellScriptLoader { targets.clear(); // select any unit but not the tank (by owners threatlist) - Unit* target = GetCaster()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 1, -GetCaster()->GetObjectSize(), true, -SPELL_IMPALED); + Unit* target = GetCaster()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 1, -GetCaster()->GetCombatReach(), true, -SPELL_IMPALED); if (!target) target = GetCaster()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true); // or the tank if its solo if (!target) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index e525c2efa45..94bf769b771 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -197,77 +197,80 @@ enum Events { // The Lich King // intro events - EVENT_INTRO_MOVE_1 = 1, - EVENT_INTRO_MOVE_2 = 2, - EVENT_INTRO_MOVE_3 = 3, - EVENT_INTRO_TALK_1 = 4, - EVENT_EMOTE_CAST_SHOUT = 5, - EVENT_INTRO_EMOTE_1 = 6, - EVENT_INTRO_CHARGE = 7, - EVENT_INTRO_CAST_FREEZE = 8, - EVENT_FINISH_INTRO = 9, + EVENT_INTRO_MOVE_1 = 1, + EVENT_INTRO_MOVE_2, + EVENT_INTRO_MOVE_3, + EVENT_INTRO_TALK_1, + EVENT_EMOTE_CAST_SHOUT, + EVENT_INTRO_EMOTE_1, + EVENT_INTRO_CHARGE, + EVENT_INTRO_CAST_FREEZE, + EVENT_FINISH_INTRO, // combat events - EVENT_SUMMON_SHAMBLING_HORROR = 10, - EVENT_SUMMON_DRUDGE_GHOUL = 11, - EVENT_INFEST = 12, - EVENT_NECROTIC_PLAGUE = 13, - EVENT_SHADOW_TRAP = 14, // heroic only - EVENT_SOUL_REAPER = 15, - EVENT_DEFILE = 16, - EVENT_HARVEST_SOUL = 17, // normal mode only - EVENT_PAIN_AND_SUFFERING = 18, - EVENT_SUMMON_ICE_SPHERE = 19, - EVENT_SUMMON_RAGING_SPIRIT = 20, - EVENT_QUAKE = 21, - EVENT_SUMMON_VALKYR = 22, - EVENT_GRAB_PLAYER = 23, - EVENT_MOVE_TO_DROP_POS = 24, - EVENT_LIFE_SIPHON = 25, // heroic only - EVENT_START_ATTACK = 26, - EVENT_QUAKE_2 = 27, - EVENT_VILE_SPIRITS = 28, - EVENT_HARVEST_SOULS = 29, // heroic only - EVENT_BERSERK = 30, - EVENT_SOUL_RIP = 31, - EVENT_DESTROY_SOUL = 32, - EVENT_FROSTMOURNE_TALK_1 = 33, - EVENT_FROSTMOURNE_TALK_2 = 34, - EVENT_FROSTMOURNE_TALK_3 = 35, - EVENT_TELEPORT_BACK = 36, - EVENT_FROSTMOURNE_HEROIC = 37, - EVENT_OUTRO_TALK_1 = 38, - EVENT_OUTRO_TALK_2 = 39, - EVENT_OUTRO_EMOTE_TALK = 40, - EVENT_OUTRO_TALK_3 = 41, - EVENT_OUTRO_MOVE_CENTER = 42, - EVENT_OUTRO_TALK_4 = 43, - EVENT_OUTRO_RAISE_DEAD = 44, - EVENT_OUTRO_TALK_5 = 45, - EVENT_OUTRO_BLESS = 46, - EVENT_OUTRO_REMOVE_ICE = 47, - EVENT_OUTRO_MOVE_1 = 48, - EVENT_OUTRO_JUMP = 49, - EVENT_OUTRO_TALK_6 = 50, - EVENT_OUTRO_KNOCK_BACK = 51, - EVENT_OUTRO_SOUL_BARRAGE = 52, - EVENT_OUTRO_SUMMON_TERENAS = 53, - EVENT_OUTRO_TERENAS_TALK_1 = 54, - EVENT_OUTRO_TERENAS_TALK_2 = 55, - EVENT_OUTRO_TALK_7 = 56, - EVENT_OUTRO_TALK_8 = 57, + EVENT_SUMMON_SHAMBLING_HORROR, + EVENT_SUMMON_DRUDGE_GHOUL, + EVENT_INFEST, + EVENT_NECROTIC_PLAGUE, + EVENT_SHADOW_TRAP, // heroic only + EVENT_SOUL_REAPER, + EVENT_DEFILE, + EVENT_HARVEST_SOUL, // normal mode only + EVENT_PAIN_AND_SUFFERING, + EVENT_SUMMON_ICE_SPHERE, + EVENT_SUMMON_RAGING_SPIRIT, + EVENT_QUAKE, + EVENT_SUMMON_VALKYR, + EVENT_GRAB_PLAYER, + EVENT_MOVE_TO_DROP_POS, + EVENT_LIFE_SIPHON, // heroic only + EVENT_MOVE_TO_CENTER, // heroic only + EVENT_START_ATTACK, + EVENT_SUMMON_RAGING_SPIRIT_2, + EVENT_QUAKE_2, + EVENT_VILE_SPIRITS, + EVENT_HARVEST_SOULS, // heroic only + EVENT_BERSERK, + EVENT_SOUL_RIP, + EVENT_DESTROY_SOUL, + EVENT_FROSTMOURNE_TALK_1, + EVENT_FROSTMOURNE_TALK_2, + EVENT_FROSTMOURNE_TALK_3, + EVENT_TELEPORT_BACK, + EVENT_FROSTMOURNE_HEROIC, + EVENT_OUTRO_TALK_1, + EVENT_OUTRO_TALK_2, + EVENT_OUTRO_EMOTE_TALK, + EVENT_OUTRO_TALK_3, + EVENT_OUTRO_MOVE_CENTER, + EVENT_OUTRO_TALK_4, + EVENT_OUTRO_RAISE_DEAD, + EVENT_OUTRO_TALK_5, + EVENT_OUTRO_BLESS, + EVENT_OUTRO_REMOVE_ICE, + EVENT_OUTRO_MOVE_1, + EVENT_OUTRO_JUMP, + EVENT_OUTRO_TALK_6, + EVENT_OUTRO_KNOCK_BACK, + EVENT_OUTRO_SOUL_BARRAGE, + EVENT_OUTRO_SUMMON_TERENAS, + EVENT_OUTRO_TERENAS_TALK_1, + EVENT_OUTRO_TERENAS_TALK_2, + EVENT_OUTRO_TALK_7, + EVENT_OUTRO_TALK_8, // Shambling Horror - EVENT_SHOCKWAVE = 58, - EVENT_ENRAGE = 59, + EVENT_SHOCKWAVE, + EVENT_ENRAGE, // Raging Spirit - EVENT_SOUL_SHRIEK = 60, + EVENT_SOUL_SHRIEK, + EVENT_SET_AGRESSIVE, // Strangulate Vehicle (Harvest Soul) - EVENT_TELEPORT = 61, - EVENT_MOVE_TO_LICH_KING = 62, - EVENT_DESPAWN_SELF = 63, + EVENT_TELEPORT, + EVENT_MOVE_TO_LICH_KING, + EVENT_DESPAWN_SELF, }; enum EventGroups @@ -320,6 +323,7 @@ enum MovePoints POINT_OUTRO_JUMP = 11, POINT_LK_OUTRO_2 = 12, POINT_GROUND = 13, + POINT_SIPHON = 14, POINT_CHARGE = 1003, // globally used number for charge spell effects }; @@ -334,12 +338,14 @@ enum EncounterActions ACTION_SUMMON_TERENAS = 6, ACTION_FINISH_OUTRO = 7, ACTION_TELEPORT_BACK = 8, + ACTION_DISABLE_RAGING = 9 }; enum MiscData { LIGHT_SNOWSTORM = 2490, LIGHT_SOULSTORM = 2508, + LIGHT_FOG = 2509, MUSIC_FROZEN_THRONE = 17457, MUSIC_SPECIAL = 17458, // Summon Shambling Horror, Remorseless Winter, Quake, Summon Val'kyr Periodic, Harvest Soul, Vile Spirits @@ -499,17 +505,7 @@ class boss_the_lich_king : public CreatureScript _vileSpiritExplosions = 0; } - void InitializeAI() override - { - SetupEncounter(); - } - - void JustRespawned() override - { - SetupEncounter(); - } - - void SetupEncounter() + void Reset() override { _Reset(); me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); @@ -524,9 +520,10 @@ class boss_the_lich_king : public CreatureScript Cell::VisitGridObjects(me, worker, 333.0f); // Reset any light override - me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, 0, 5000); + me->GetMap()->SetZoneOverrideLight(AREA_ICECROWN_CITADEL, 0, 5000); - me->SummonCreature(NPC_HIGHLORD_TIRION_FORDRING_LK, TirionSpawn, TEMPSUMMON_MANUAL_DESPAWN); + if (!ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HIGHLORD_TIRION_FORDRING))) + me->SummonCreature(NPC_HIGHLORD_TIRION_FORDRING_LK, TirionSpawn, TEMPSUMMON_MANUAL_DESPAWN); } void JustDied(Unit* /*killer*/) override @@ -538,6 +535,8 @@ class boss_the_lich_king : public CreatureScript me->GetMotionMaster()->MoveFall(); if (Creature* frostmourne = me->FindNearestCreature(NPC_FROSTMOURNE_TRIGGER, 50.0f)) frostmourne->DespawnOrUnsummon(); + me->GetMap()->SetZoneOverrideLight(AREA_ICECROWN_CITADEL, LIGHT_FOG, 5000); + me->GetMap()->SetZoneWeather(AREA_ICECROWN_CITADEL, WEATHER_STATE_FOG, 0.0f); } void EnterCombat(Unit* target) override @@ -550,6 +549,7 @@ class boss_the_lich_king : public CreatureScript } me->setActive(true); + me->SetCombatPulseDelay(5); DoZoneInCombat(); events.SetPhase(PHASE_ONE); @@ -592,7 +592,7 @@ class boss_the_lich_king : public CreatureScript case ACTION_START_ENCOUNTER: instance->SetBossState(DATA_THE_LICH_KING, IN_PROGRESS); Talk(SAY_LK_INTRO_1); - me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FROZEN_THRONE); + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_FROZEN_THRONE); // schedule talks me->SetStandState(UNIT_STAND_STATE_STAND); events.ScheduleEvent(EVENT_INTRO_MOVE_1, 4000); @@ -601,10 +601,10 @@ class boss_the_lich_king : public CreatureScript events.ScheduleEvent(EVENT_START_ATTACK, 5000); break; case ACTION_PLAY_MUSIC: - me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FINAL); + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_FINAL); break; case ACTION_RESTORE_LIGHT: - me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, 0, 5000); + me->GetMap()->SetZoneOverrideLight(AREA_ICECROWN_CITADEL, 0, 5000); break; case ACTION_BREAK_FROSTMOURNE: me->CastSpell((Unit*)NULL, SPELL_SUMMON_BROKEN_FROSTMOURNE, TRIGGERED_IGNORE_CAST_IN_PROGRESS); @@ -666,6 +666,7 @@ class boss_the_lich_king : public CreatureScript events.SetPhase(PHASE_TRANSITION); me->SetReactState(REACT_PASSIVE); me->AttackStop(); + me->InterruptNonMeleeSpells(true); me->GetMotionMaster()->MovePoint(POINT_CENTER_1, CenterPosition); return; } @@ -675,6 +676,7 @@ class boss_the_lich_king : public CreatureScript events.SetPhase(PHASE_TRANSITION); me->SetReactState(REACT_PASSIVE); me->AttackStop(); + me->InterruptNonMeleeSpells(true); me->GetMotionMaster()->MovePoint(POINT_CENTER_2, CenterPosition); return; } @@ -686,7 +688,7 @@ class boss_the_lich_king : public CreatureScript events.Reset(); events.SetPhase(PHASE_OUTRO); summons.DespawnAll(); - me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FURY_OF_FROSTMOURNE); + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_FURY_OF_FROSTMOURNE); me->InterruptNonMeleeSpells(true); me->CastSpell((Unit*)NULL, SPELL_FURY_OF_FROSTMOURNE, TRIGGERED_NONE); me->SetWalk(true); @@ -738,8 +740,8 @@ class boss_the_lich_king : public CreatureScript { summon->CastSpell((Unit*)NULL, SPELL_BROKEN_FROSTMOURNE, true); - me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, LIGHT_SOULSTORM, 10000); - me->GetMap()->SetZoneWeather(AREA_THE_FROZEN_THRONE, WEATHER_STATE_BLACKSNOW, 0.5f); + me->GetMap()->SetZoneOverrideLight(AREA_ICECROWN_CITADEL, LIGHT_SOULSTORM, 10000); + me->GetMap()->SetZoneWeather(AREA_ICECROWN_CITADEL, WEATHER_STATE_BLACKSNOW, 0.5f); events.ScheduleEvent(EVENT_OUTRO_SOUL_BARRAGE, 5000, 0, PHASE_OUTRO); return; @@ -793,8 +795,8 @@ class boss_the_lich_king : public CreatureScript { if (spell->Id == REMORSELESS_WINTER_1 || spell->Id == REMORSELESS_WINTER_2) { - me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, LIGHT_SNOWSTORM, 5000); - me->GetMap()->SetZoneWeather(AREA_THE_FROZEN_THRONE, WEATHER_STATE_LIGHT_SNOW, 0.5f); + me->GetMap()->SetZoneOverrideLight(AREA_ICECROWN_CITADEL, LIGHT_SNOWSTORM, 5000); + me->GetMap()->SetZoneWeather(AREA_ICECROWN_CITADEL, WEATHER_STATE_LIGHT_SNOW, 0.5f); } } @@ -820,13 +822,14 @@ class boss_the_lich_king : public CreatureScript case POINT_CENTER_1: me->SetFacingTo(0.0f, true); Talk(SAY_LK_REMORSELESS_WINTER); - me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL); DoCast(me, SPELL_REMORSELESS_WINTER_1); + summons.DespawnEntry(NPC_SHADOW_TRAP); events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions events.ScheduleEvent(EVENT_QUAKE, 62500, 0, PHASE_TRANSITION); events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 4000, 0, PHASE_TRANSITION); events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 8000, 0, PHASE_TRANSITION); - events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, 3000, 0, PHASE_TRANSITION); + events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, 6000, 0, PHASE_TRANSITION); events.ScheduleEvent(EVENT_SUMMON_VALKYR, 78000, 0, PHASE_TWO); events.ScheduleEvent(EVENT_INFEST, 70000, 0, PHASE_TWO); events.ScheduleEvent(EVENT_DEFILE, 97000, 0, PHASE_TWO); @@ -835,14 +838,14 @@ class boss_the_lich_king : public CreatureScript case POINT_CENTER_2: me->SetFacingTo(0.0f, true); Talk(SAY_LK_REMORSELESS_WINTER); - me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL); DoCast(me, SPELL_REMORSELESS_WINTER_2); summons.DespawnEntry(NPC_VALKYR_SHADOWGUARD); events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions events.ScheduleEvent(EVENT_QUAKE_2, 62500, 0, PHASE_TRANSITION); events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 6000, 0, PHASE_TRANSITION); events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 8000, 0, PHASE_TRANSITION); - events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, 5000, 0, PHASE_TRANSITION); + events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT_2, 5000, 0, PHASE_TRANSITION); events.ScheduleEvent(EVENT_DEFILE, 95500, 0, PHASE_THREE); events.ScheduleEvent(EVENT_SOUL_REAPER, 99500, 0, PHASE_THREE); events.ScheduleEvent(EVENT_VILE_SPIRITS, 79500, EVENT_GROUP_VILE_SPIRITS, PHASE_THREE); @@ -921,7 +924,7 @@ class boss_the_lich_king : public CreatureScript break; case EVENT_SUMMON_SHAMBLING_HORROR: DoCast(me, SPELL_SUMMON_SHAMBLING_HORROR); - me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL); events.ScheduleEvent(EVENT_SUMMON_SHAMBLING_HORROR, 60000, 0, PHASE_ONE); break; case EVENT_SUMMON_DRUDGE_GHOUL: @@ -977,24 +980,29 @@ class boss_the_lich_king : public CreatureScript me->CastSpell(target, SPELL_RAGING_SPIRIT, TRIGGERED_NONE); events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, urand(22000, 23000), 0, PHASE_TRANSITION); break; + case EVENT_SUMMON_RAGING_SPIRIT_2: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) + me->CastSpell(target, SPELL_RAGING_SPIRIT, TRIGGERED_NONE); + events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, 18000, 0, PHASE_TRANSITION); + break; case EVENT_QUAKE: events.SetPhase(PHASE_TWO); me->ClearUnitState(UNIT_STATE_CASTING); // clear state to ensure check in DoCastAOE passes DoCastAOE(SPELL_QUAKE); - me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL); Talk(SAY_LK_QUAKE); break; case EVENT_QUAKE_2: events.SetPhase(PHASE_THREE); me->ClearUnitState(UNIT_STATE_CASTING); // clear state to ensure check in DoCastAOE passes DoCastAOE(SPELL_QUAKE); - me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL); Talk(SAY_LK_QUAKE); break; case EVENT_SUMMON_VALKYR: - me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL); Talk(SAY_LK_SUMMON_VALKYR); - DoCastAOE(SUMMON_VALKYR); + DoCastAOE(SUMMON_VALKYR, true); events.ScheduleEvent(EVENT_SUMMON_VALKYR, urand(45000, 50000), 0, PHASE_TWO); break; case EVENT_START_ATTACK: @@ -1003,7 +1011,7 @@ class boss_the_lich_king : public CreatureScript events.SetPhase(PHASE_THREE); break; case EVENT_VILE_SPIRITS: - me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL); DoCastAOE(SPELL_VILE_SPIRITS); events.ScheduleEvent(EVENT_VILE_SPIRITS, urand(35000, 40000), EVENT_GROUP_VILE_SPIRITS, PHASE_THREE); break; @@ -1019,6 +1027,25 @@ class boss_the_lich_king : public CreatureScript events.RescheduleEvent(EVENT_SOUL_REAPER, urand(57000, 62000), 0, PHASE_THREE); events.ScheduleEvent(EVENT_START_ATTACK, 49000); events.ScheduleEvent(EVENT_FROSTMOURNE_HEROIC, 6500); + for (ObjectGuid guid : summons) + { + if (Creature* summon = ObjectAccessor::GetCreature(*me, guid)) + { + if (summon->GetEntry() == NPC_VILE_SPIRIT) + { + summon->m_Events.KillAllEvents(true); + summon->m_Events.AddEvent(new VileSpiritActivateEvent(summon), summon->m_Events.CalculateTime(56500)); + summon->SetReactState(REACT_PASSIVE); + summon->CombatStop(true); + summon->RemoveAurasDueToSpell(SPELL_VILE_SPIRIT_MOVE_SEARCH); + summon->RemoveAurasDueToSpell(SPELL_VILE_SPIRIT_DAMAGE_SEARCH); + summon->GetMotionMaster()->MoveTargetedHome(); + summon->GetMotionMaster()->MoveRandom(10.0f); + } + else if (summon->GetEntry() == NPC_RAGING_SPIRIT) + summon->AI()->DoAction(ACTION_DISABLE_RAGING); + } + } break; case EVENT_FROSTMOURNE_HEROIC: if (TempSummon* terenas = me->GetMap()->SummonCreature(NPC_TERENAS_MENETHIL_FROSTMOURNE_H, TerenasSpawnHeroic, NULL, 50000)) @@ -1034,18 +1061,6 @@ class boss_the_lich_king : public CreatureScript spawner->CastSpell(spawner, SPELL_SUMMON_SPIRIT_BOMB_2, true); // summons bombs on players spawner->m_Events.AddEvent(new TriggerWickedSpirit(spawner), spawner->m_Events.CalculateTime(3000)); } - - for (SummonList::iterator i = summons.begin(); i != summons.end(); ++i) - { - Creature* summon = ObjectAccessor::GetCreature(*me, *i); - if (summon && summon->GetEntry() == NPC_VILE_SPIRIT) - { - summon->m_Events.KillAllEvents(true); - summon->m_Events.AddEvent(new VileSpiritActivateEvent(summon), summon->m_Events.CalculateTime(50000)); - summon->GetMotionMaster()->MoveRandom(10.0f); - summon->SetReactState(REACT_PASSIVE); - } - } } break; case EVENT_OUTRO_TALK_1: @@ -1074,7 +1089,7 @@ class boss_the_lich_king : public CreatureScript case EVENT_OUTRO_RAISE_DEAD: DoCastAOE(SPELL_RAISE_DEAD); me->ClearUnitState(UNIT_STATE_CASTING); - me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FINAL); + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_FINAL); break; case EVENT_OUTRO_TALK_5: Talk(SAY_LK_OUTRO_5); @@ -1189,7 +1204,7 @@ class npc_tirion_fordring_tft : public CreatureScript if (spell->Id == SPELL_ICE_LOCK) me->SetFacingTo(3.085098f); else if (spell->Id == SPELL_BROKEN_FROSTMOURNE_KNOCK) - SetEquipmentSlots(true); // remove glow on ashbringer + me->LoadEquipment(1); // remove glow on ashbringer } void sGossipSelect(Player* /*player*/, uint32 menuId, uint32 gossipListId) override @@ -1357,7 +1372,9 @@ class npc_raging_spirit : public CreatureScript void Reset() override { + me->SetReactState(REACT_PASSIVE); _events.Reset(); + _events.ScheduleEvent(EVENT_SET_AGRESSIVE, 2000); _events.ScheduleEvent(EVENT_SOUL_SHRIEK, urand(12000, 15000)); DoCast(me, SPELL_PLAGUE_AVOIDANCE, true); DoCast(me, SPELL_RAGING_SPIRIT_VISUAL, true); @@ -1367,6 +1384,19 @@ class npc_raging_spirit : public CreatureScript DoCast(me, SPELL_BOSS_HITTIN_YA, true); } + void DoAction(int32 action) override + { + if (action == ACTION_DISABLE_RAGING) + { + _events.Reset(); + _events.SetPhase(PHASE_FROSTMOURNE); + _events.ScheduleEvent(EVENT_SET_AGRESSIVE, 52000); + me->SetReactState(REACT_PASSIVE); + me->AttackStop(); + me->InterruptNonMeleeSpells(true); + } + } + void IsSummonedBy(Unit* /*summoner*/) override { // player is the spellcaster so register summon manually @@ -1384,7 +1414,7 @@ class npc_raging_spirit : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim()) + if (!_events.IsInPhase(PHASE_FROSTMOURNE) && !UpdateVictim()) return; _events.Update(diff); @@ -1400,6 +1430,14 @@ class npc_raging_spirit : public CreatureScript DoCastAOE(SPELL_SOUL_SHRIEK); _events.ScheduleEvent(EVENT_SOUL_SHRIEK, urand(12000, 15000)); break; + case EVENT_SET_AGRESSIVE: + me->SetReactState(REACT_AGGRESSIVE); + if (_events.IsInPhase(PHASE_FROSTMOURNE)) + { + _events.SetPhase(PHASE_THREE); + _events.ScheduleEvent(EVENT_SOUL_SHRIEK, urand(12000, 15000)); + } + break; default: break; } @@ -1454,19 +1492,18 @@ class npc_valkyr_shadowguard : public CreatureScript if (me->HealthBelowPctDamaged(50, damage)) { - _events.Reset(); DoCastAOE(SPELL_EJECT_ALL_PASSENGERS); - me->GetMotionMaster()->MoveTargetedHome(); - me->ClearUnitState(UNIT_STATE_EVADE); + ScheduleHeroicEvents(); } } - void JustReachedHome() override + void ScheduleHeroicEvents() { - // schedule siphon life event (heroic only) DoZoneInCombat(); _events.Reset(); + _events.ScheduleEvent(EVENT_MOVE_TO_CENTER, 1); _events.ScheduleEvent(EVENT_LIFE_SIPHON, 2000); + me->ClearUnitState(UNIT_STATE_EVADE); } void AttackStart(Unit* /*target*/) override @@ -1482,7 +1519,10 @@ class npc_valkyr_shadowguard : public CreatureScript { case POINT_DROP_PLAYER: DoCastAOE(SPELL_EJECT_ALL_PASSENGERS); - me->DespawnOrUnsummon(1000); + if (IsHeroic()) + ScheduleHeroicEvents(); + else + me->DespawnOrUnsummon(1000); break; case POINT_CHARGE: if (Player* target = ObjectAccessor::GetPlayer(*me, _grabbedPlayer)) @@ -1545,6 +1585,13 @@ class npc_valkyr_shadowguard : public CreatureScript DoCast(target, SPELL_LIFE_SIPHON); _events.ScheduleEvent(EVENT_LIFE_SIPHON, 2500); break; + case EVENT_MOVE_TO_CENTER: + { + Position pos = me->GetRandomPoint(CenterPosition, 4.0f); + pos.m_positionZ = me->GetHomePosition().m_positionZ; + me->GetMotionMaster()->MovePoint(POINT_SIPHON, pos); + break; + } default: break; } @@ -1607,6 +1654,7 @@ class npc_strangulate_vehicle : public CreatureScript if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING))) lichKing->AI()->SummonedCreatureDespawn(me); + me->DespawnOrUnsummon(); } void UpdateAI(uint32 diff) override @@ -2099,7 +2147,7 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader } private: - void SelectTarget(std::list<Unit*>& targets) + void SelectTarget(std::list<WorldObject*>& targets) { targets.sort(Trinity::ObjectDistanceOrderPred(GetCaster())); if (targets.size() < 2) @@ -2125,6 +2173,7 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader void Register() override { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_necrotic_plague_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); BeforeHit += BeforeSpellHitFn(spell_the_lich_king_necrotic_plague_SpellScript::CheckAura); OnHit += SpellHitFn(spell_the_lich_king_necrotic_plague_SpellScript::AddMissingStack); } @@ -2357,12 +2406,6 @@ class spell_the_lich_king_raging_spirit : public SpellScriptLoader { PrepareSpellScript(spell_the_lich_king_raging_spirit_SpellScript); - bool Validate(SpellInfo const* spell) override - { - SpellEffectInfo const* effect0 = spell->GetEffect(EFFECT_0); - return effect0 && ValidateSpellInfo({ uint32(effect0->CalcValue()) }); - } - void HandleScript(SpellEffIndex effIndex) { PreventHitDefaultEffect(effIndex); @@ -3134,6 +3177,34 @@ class spell_the_lich_king_jump_remove_aura : public SpellScriptLoader } }; +class spell_the_lich_king_harvest_souls_teleport : public SpellScriptLoader +{ +public: + spell_the_lich_king_harvest_souls_teleport() : SpellScriptLoader("spell_the_lich_king_harvest_souls_teleport") { } + + class spell_the_lich_king_harvest_souls_teleport_SpellScript : public SpellScript + { + PrepareSpellScript(spell_the_lich_king_harvest_souls_teleport_SpellScript); + + void RelocateTransportOffset(SpellEffIndex /*effIndex*/) + { + float randCoordX = frand(-18.0f, 18.0f); + float randCoordY = frand(-18.0f, 18.0f); + GetHitDest()->RelocateOffset({ randCoordX, randCoordY, 0.0f, 0.0f }); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_harvest_souls_teleport_SpellScript::RelocateTransportOffset, EFFECT_1, SPELL_EFFECT_TELEPORT_UNITS); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_the_lich_king_harvest_souls_teleport_SpellScript(); + } +}; + class achievement_been_waiting_long_time : public AchievementCriteriaScript { public: @@ -3203,6 +3274,7 @@ void AddSC_boss_the_lich_king() new spell_the_lich_king_jump(); new spell_the_lich_king_jump_remove_aura(); new spell_trigger_spell_from_caster("spell_the_lich_king_mass_resurrection", SPELL_MASS_RESURRECTION_REAL); + new spell_the_lich_king_harvest_souls_teleport(); new achievement_been_waiting_long_time(); new achievement_neck_deep_in_vile(); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 1f9d88ea885..8fff8922983 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -321,6 +321,7 @@ enum ICCreaturesIds NPC_WORLD_TRIGGER_INFINITE_AOI = 36171, NPC_SPIRIT_BOMB = 39189, NPC_FROSTMOURNE_TRIGGER = 38584, + NPC_SHADOW_TRAP = 39137, // Generic NPC_INVISIBLE_STALKER = 30298 @@ -524,8 +525,7 @@ enum ICWorldStatesICC enum ICAreaIds { - AREA_ICECROWN_CITADEL = 4812, - AREA_THE_FROZEN_THRONE = 4859 + AREA_ICECROWN_CITADEL = 4812 }; class spell_trigger_spell_from_caster : public SpellScriptLoader diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 1d0ef4ccea0..d70f0d07c54 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -881,26 +881,20 @@ public: { PrepareAuraScript(spell_kelthuzad_chains_AuraScript); - void HandleApply(AuraEffect const* /*eff*/, AuraEffectHandleModes /*mode*/) + void HandleApply(AuraEffect const* aurEff, AuraEffectHandleModes mode) { - Unit* target = GetTarget(); - float scale = target->GetObjectScale(); - ApplyPercentModFloatVar(scale, 200.0f, true); - target->SetObjectScale(scale); + aurEff->HandleAuraModScale(GetTargetApplication(), mode, true); } - void HandleRemove(AuraEffect const* /*eff*/, AuraEffectHandleModes /*mode*/) + void HandleRemove(AuraEffect const* aurEff, AuraEffectHandleModes mode) { - Unit* target = GetTarget(); - float scale = target->GetObjectScale(); - ApplyPercentModFloatVar(scale, 200.0f, false); - target->SetObjectScale(scale); + aurEff->HandleAuraModScale(GetTargetApplication(), mode, false); } void Register() override { - AfterEffectApply += AuraEffectApplyFn(spell_kelthuzad_chains_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL); - AfterEffectRemove += AuraEffectApplyFn(spell_kelthuzad_chains_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL); + AfterEffectApply += AuraEffectApplyFn(spell_kelthuzad_chains_AuraScript::HandleApply, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectApplyFn(spell_kelthuzad_chains_AuraScript::HandleRemove, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL); } }; diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index b61e42974ac..1569697c81c 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -43,7 +43,7 @@ BossBoundaryData const boundaries = /* Military Quarter */ { BOSS_RAZUVIOUS, new ZRangeBoundary(260.0f, 287.0f) }, // will not chase onto the upper floor { BOSS_GOTHIK, new RectangleBoundary(2627.0f, 2764.0f, -3440.0f, -3275.0f) }, - { BOSS_HORSEMEN, new ParallelogramBoundary(AreaBoundary::DoublePosition(2646.0, -2959.0), AreaBoundary::DoublePosition(2529.0, -3075.0), AreaBoundary::DoublePosition(2506.0, -2854.0)) }, + { BOSS_HORSEMEN, new ParallelogramBoundary(Position(2646.0f, -2959.0f), Position(2529.0f, -3075.0f), Position(2506.0f, -2854.0f)) }, /* Construct Quarter */ { BOSS_PATCHWERK, new CircleBoundary(Position(3204.0f, -3241.4f), 240.0f) }, @@ -51,9 +51,9 @@ BossBoundaryData const boundaries = { BOSS_GROBBULUS, new CircleBoundary(Position(3204.0f, -3241.4f), 240.0f) }, { BOSS_GROBBULUS, new RectangleBoundary(3295.0f, 3340.0f, -3254.2f, -3230.18f, true) }, // entrance door blocker { BOSS_GLUTH, new CircleBoundary(Position(3293.0f, -3142.0f), 80.0) }, - { BOSS_GLUTH, new ParallelogramBoundary(AreaBoundary::DoublePosition(3401.0, -3149.0), AreaBoundary::DoublePosition(3261.0, -3028.0), AreaBoundary::DoublePosition(3320.0, -3267.0)) }, + { BOSS_GLUTH, new ParallelogramBoundary(Position(3401.0f, -3149.0f), Position(3261.0f, -3028.0f), Position(3320.0f, -3267.0f)) }, { BOSS_GLUTH, new ZRangeBoundary(285.0f, 310.0f) }, - { BOSS_THADDIUS, new ParallelogramBoundary(AreaBoundary::DoublePosition(3478.3, -3070.0), AreaBoundary::DoublePosition(3370.0, -2961.5), AreaBoundary::DoublePosition(3580.0, -2961.5)) }, + { BOSS_THADDIUS, new ParallelogramBoundary(Position(3478.3f, -3070.0f), Position(3370.0f, -2961.5f), Position(3580.0f, -2961.5f)) }, /* Frostwyrm Lair */ { BOSS_SAPPHIRON, new CircleBoundary(Position(3517.627f, -5255.5f), 110.0) }, diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h index b066eb59bea..4c3faf67b5a 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h @@ -23,7 +23,7 @@ #define EoEScriptName "instance_eye_of_eternity" #define DataHeader "EOE" -enum InstanceData +enum EOEInstanceData { DATA_MALYGOS_EVENT, MAX_ENCOUNTER, @@ -33,7 +33,7 @@ enum InstanceData DATA_RESPAWN_IRIS }; -enum InstanceData64 +enum EOEInstanceData64 { DATA_TRIGGER, DATA_MALYGOS, @@ -44,7 +44,7 @@ enum InstanceData64 DATA_GIFT_BOX_BUNNY_GUID }; -enum InstanceNpcs +enum EOEInstanceNpcs { NPC_MALYGOS = 28859, NPC_VORTEX_TRIGGER = 30090, @@ -60,7 +60,7 @@ enum InstanceNpcs NPC_SURGE_OF_POWER = 30334 }; -enum InstanceGameObjects +enum EOEInstanceGameObjects { GO_NEXUS_RAID_PLATFORM = 193070, GO_EXIT_PORTAL = 193908, @@ -72,12 +72,12 @@ enum InstanceGameObjects GO_HEART_OF_MAGIC_25 = 194159 }; -enum InstanceEvents +enum EOEInstanceEvents { EVENT_FOCUSING_IRIS = 20711 }; -enum InstanceSpells +enum EOEInstanceSpells { SPELL_VORTEX_4 = 55853, // damage | used to enter to the vehicle SPELL_VORTEX_5 = 56263, // damage | used to enter to the vehicle diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 818485e4440..4e5019618ec 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -410,7 +410,7 @@ class boss_algalon_the_observer : public CreatureScript { _firstPull = false; Talk(SAY_ALGALON_START_TIMER); - if (Creature* brann = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BRANN_BRONZEBEARD_ALG))) + if (Creature* brann = instance->GetCreature(DATA_BRANN_BRONZEBEARD_ALG)) brann->AI()->DoAction(ACTION_FINISH_INTRO); me->setActive(true); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp index b8f23964df6..fe01a917cd6 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp @@ -393,8 +393,8 @@ class npc_sanctum_sentry : public CreatureScript void JustDied(Unit* /*killer*/) override { - if (Creature* Auriaya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_AURIAYA))) - Auriaya->AI()->DoAction(ACTION_CRAZY_CAT_LADY); + if (Creature* auriaya = instance->GetCreature(BOSS_AURIAYA)) + auriaya->AI()->DoAction(ACTION_CRAZY_CAT_LADY); } private: @@ -472,8 +472,8 @@ class npc_feral_defender : public CreatureScript void JustDied(Unit* /*killer*/) override { DoCast(me, SPELL_SUMMON_ESSENCE); - if (Creature* Auriaya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_AURIAYA))) - Auriaya->AI()->DoAction(ACTION_RESPAWN_DEFENDER); + if (Creature* auriaya = instance->GetCreature(BOSS_AURIAYA)) + auriaya->AI()->DoAction(ACTION_RESPAWN_DEFENDER); } private: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index b2958daf07c..8e734e6d3e7 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -974,11 +974,6 @@ class npc_mimirons_inferno : public CreatureScript public: npc_mimirons_inferno() : CreatureScript("npc_mimirons_inferno") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetUlduarAI<npc_mimirons_infernoAI>(creature); - } - struct npc_mimirons_infernoAI : public npc_escortAI { npc_mimirons_infernoAI(Creature* creature) : npc_escortAI(creature) @@ -1031,6 +1026,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetUlduarAI<npc_mimirons_infernoAI>(creature); + } }; class npc_hodirs_fury : public CreatureScript @@ -1247,7 +1246,7 @@ class npc_lorekeeper : public CreatureScript CloseGossipMenuFor(player); me->GetMap()->LoadGrid(364, -16); // make sure leviathan is loaded - if (Creature* leviathan = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_LEVIATHAN))) + if (Creature* leviathan = _instance->GetCreature(BOSS_LEVIATHAN)) { leviathan->AI()->DoAction(ACTION_START_HARD_MODE); me->SetVisible(false); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index ad4b7c6413f..5cfc0d75481 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -1061,8 +1061,8 @@ class npc_ancient_water_spirit : public CreatureScript { Initialize(); instance = me->GetInstanceScript(); - if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA))) - waveCount = ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount; + if (Creature* freya = instance->GetCreature(BOSS_FREYA)) + waveCount = ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->trioWaveCount; else waveCount = 0; } @@ -1099,10 +1099,10 @@ class npc_ancient_water_spirit : public CreatureScript void JustDied(Unit* /*killer*/) override { - if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA))) + if (Creature* freya = instance->GetCreature(BOSS_FREYA)) { - ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false; - ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(1); + ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->checkElementalAlive[waveCount] = false; + ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->LasherDead(1); } } @@ -1129,8 +1129,8 @@ class npc_storm_lasher : public CreatureScript { Initialize(); instance = me->GetInstanceScript(); - if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA))) - waveCount = ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount; + if (Creature* freya = instance->GetCreature(BOSS_FREYA)) + waveCount = ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->trioWaveCount; else waveCount = 0; } @@ -1173,10 +1173,10 @@ class npc_storm_lasher : public CreatureScript void JustDied(Unit* /*killer*/) override { - if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA))) + if (Creature* freya = instance->GetCreature(BOSS_FREYA)) { - ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false; - ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(2); + ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->checkElementalAlive[waveCount] = false; + ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->LasherDead(2); } } @@ -1203,8 +1203,8 @@ class npc_snaplasher : public CreatureScript npc_snaplasherAI(Creature* creature) : ScriptedAI(creature) { instance = me->GetInstanceScript(); - if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA))) - waveCount = ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount; + if (Creature* freya = instance->GetCreature(BOSS_FREYA)) + waveCount = ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->trioWaveCount; else waveCount = 0; } @@ -1222,10 +1222,10 @@ class npc_snaplasher : public CreatureScript void JustDied(Unit* /*killer*/) override { - if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA))) + if (Creature* freya = instance->GetCreature(BOSS_FREYA)) { - ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false; - ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(4); + ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->checkElementalAlive[waveCount] = false; + ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->LasherDead(4); } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index 9630f1ddbfe..6c03b9f5ecb 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -336,8 +336,8 @@ class boss_saronite_animus : public CreatureScript void JustDied(Unit* /*killer*/) override { - if (Creature* Vezax = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_VEZAX))) - Vezax->AI()->DoAction(ACTION_ANIMUS_DIE); + if (Creature* vezax = instance->GetCreature(BOSS_VEZAX)) + vezax->AI()->DoAction(ACTION_ANIMUS_DIE); } void UpdateAI(uint32 diff) override @@ -434,8 +434,8 @@ class npc_saronite_vapors : public CreatureScript DoCast(me, SPELL_SARONITE_VAPORS); me->DespawnOrUnsummon(30000); - if (Creature* Vezax = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_VEZAX))) - Vezax->AI()->DoAction(ACTION_VAPORS_DIE); + if (Creature* vezax = instance->GetCreature(BOSS_VEZAX)) + vezax->AI()->DoAction(ACTION_VAPORS_DIE); } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 57b96e26943..4d8a49160bc 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -242,8 +242,8 @@ class npc_flash_freeze : public CreatureScript // Prevents to have Ice Block on other place than target is me->NearTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), target->GetOrientation()); if (target->GetTypeId() == TYPEID_PLAYER) - if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR))) - Hodir->AI()->DoAction(ACTION_CHEESE_THE_FREEZE); + if (Creature* hodir = instance->GetCreature(BOSS_HODIR)) + hodir->AI()->DoAction(ACTION_CHEESE_THE_FREEZE); } } }; @@ -291,21 +291,21 @@ class npc_ice_block : public CreatureScript void DamageTaken(Unit* who, uint32& /*damage*/) override { - if (Creature* Helper = ObjectAccessor::GetCreature(*me, targetGUID)) + if (Creature* helper = ObjectAccessor::GetCreature(*me, targetGUID)) { - Helper->RemoveUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED)); - Helper->SetControlled(false, UNIT_STATE_ROOT); + helper->RemoveUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED)); + helper->SetControlled(false, UNIT_STATE_ROOT); - if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR))) + if (Creature* hodir = instance->GetCreature(BOSS_HODIR)) { - if (!Hodir->IsInCombat()) + if (!hodir->IsInCombat()) { - Hodir->SetReactState(REACT_AGGRESSIVE); - Hodir->AI()->DoZoneInCombat(); - Hodir->AI()->AttackStart(who); + hodir->SetReactState(REACT_AGGRESSIVE); + hodir->AI()->DoZoneInCombat(); + hodir->AI()->AttackStart(who); } - Helper->AI()->AttackStart(Hodir); + helper->AI()->AttackStart(hodir); } } } @@ -717,8 +717,8 @@ class npc_hodir_priest : public CreatureScript void JustDied(Unit* /*killer*/) override { - if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR))) - Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS); + if (Creature* hodir = instance->GetCreature(BOSS_HODIR)) + hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS); } private: @@ -782,8 +782,8 @@ class npc_hodir_shaman : public CreatureScript void JustDied(Unit* /*killer*/) override { - if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR))) - Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS); + if (Creature* hodir = instance->GetCreature(BOSS_HODIR)) + hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS); } private: @@ -846,8 +846,8 @@ class npc_hodir_druid : public CreatureScript void JustDied(Unit* /*killer*/) override { - if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR))) - Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS); + if (Creature* hodir = instance->GetCreature(BOSS_HODIR)) + hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS); } private: @@ -929,8 +929,8 @@ class npc_hodir_mage : public CreatureScript void JustDied(Unit* /*killer*/) override { - if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR))) - Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS); + if (Creature* hodir = instance->GetCreature(BOSS_HODIR)) + hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS); } private: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp index e4040a44a36..37141085731 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp @@ -328,7 +328,7 @@ class npc_iron_construct : public CreatureScript if (me->HasAura(RAID_MODE(SPELL_BRITTLE, SPELL_BRITTLE_25)) && damage >= 5000) { DoCast(SPELL_SHATTER); - if (Creature* ignis = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_IGNIS))) + if (Creature* ignis = _instance->GetCreature(BOSS_IGNIS)) if (ignis->AI()) ignis->AI()->DoAction(ACTION_REMOVE_BUFF); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 5cf1cf67de8..fd4d7b02229 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -371,7 +371,7 @@ static bool IsEncounterFinished(Unit* who) mkii->DespawnOrUnsummon(120000); vx001->DespawnOrUnsummon(120000); aerial->DespawnOrUnsummon(120000); - if (Creature* mimiron = ObjectAccessor::GetCreature(*who, instance->GetGuidData(BOSS_MIMIRON))) + if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON)) mimiron->AI()->JustDied(who); return true; } @@ -428,7 +428,7 @@ class boss_mimiron : public CreatureScript me->RemoveAurasDueToSpell(SPELL_WELD); DoCast(me->GetVehicleBase(), SPELL_SEAT_6); - if (GameObject* button = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_BUTTON))) + if (GameObject* button = instance->GetGameObject(DATA_MIMIRON_BUTTON)) button->AddFlag(GO_FLAG_NOT_SELECTABLE); if (_fireFighter) @@ -458,14 +458,14 @@ class boss_mimiron : public CreatureScript _Reset(); me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_ELEVATOR))) + if (GameObject* elevator = instance->GetGameObject(DATA_MIMIRON_ELEVATOR)) elevator->SetGoState(GO_STATE_ACTIVE); if (_fireFighter) - if (Creature* computer = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_COMPUTER))) + if (Creature* computer = instance->GetCreature(DATA_COMPUTER)) computer->AI()->DoAction(DO_DEACTIVATE_COMPUTER); - if (GameObject* button = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_BUTTON))) + if (GameObject* button = instance->GetGameObject(DATA_MIMIRON_BUTTON)) { button->SetGoState(GO_STATE_READY); button->RemoveFlag(GO_FLAG_NOT_SELECTABLE); @@ -493,7 +493,7 @@ class boss_mimiron : public CreatureScript switch (eventId) { case EVENT_SUMMON_FLAMES: - if (Unit* worldtrigger = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_MIMIRON_WORLD_TRIGGER))) + if (Creature* worldtrigger = instance->GetCreature(DATA_MIMIRON_WORLD_TRIGGER)) worldtrigger->CastCustomSpell(SPELL_SCRIPT_EFFECT_SUMMON_FLAMES_INITIAL, SPELLVALUE_MAX_TARGETS, 3, NULL, true, NULL, NULL, me->GetGUID()); events.RescheduleEvent(EVENT_SUMMON_FLAMES, 28000); break; @@ -529,14 +529,14 @@ class boss_mimiron : public CreatureScript events.ScheduleEvent(EVENT_VX001_ACTIVATION_4, 5000); break; case EVENT_VX001_ACTIVATION_4: - if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_ELEVATOR))) + if (GameObject* elevator = instance->GetGameObject(DATA_MIMIRON_ELEVATOR)) elevator->SetGoState(GO_STATE_READY); - if (Unit* worldtrigger = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_MIMIRON_WORLD_TRIGGER))) + if (Creature* worldtrigger = instance->GetCreature(DATA_MIMIRON_WORLD_TRIGGER)) worldtrigger->CastSpell(worldtrigger, SPELL_ELEVATOR_KNOCKBACK); events.ScheduleEvent(EVENT_VX001_ACTIVATION_5, 6000); break; case EVENT_VX001_ACTIVATION_5: - if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_ELEVATOR))) + if (GameObject* elevator = instance->GetGameObject(DATA_MIMIRON_ELEVATOR)) elevator->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); if (Creature* vx001 = me->SummonCreature(NPC_VX_001, VX001SummonPos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000)) vx001->CastSpell(vx001, SPELL_FREEZE_ANIM); @@ -644,7 +644,7 @@ class boss_mimiron : public CreatureScript Talk(SAY_V07TRON_DEATH); if (_fireFighter) { - if (Creature* computer = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_COMPUTER))) + if (Creature* computer = instance->GetCreature(DATA_COMPUTER)) computer->AI()->DoAction(DO_DEACTIVATE_COMPUTER); me->SummonGameObject(RAID_MODE(GO_CACHE_OF_INNOVATION_FIREFIGHTER, GO_CACHE_OF_INNOVATION_FIREFIGHTER_HERO), 2744.040f, 2569.352f, 364.3135f, 3.124123f, QuaternionData(0.f, 0.f, 0.9999619f, 0.008734641f), 604800); } @@ -783,7 +783,7 @@ class boss_leviathan_mk_ii : public CreatureScript void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) - if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON))) + if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON)) mimiron->AI()->Talk(events.IsInPhase(PHASE_LEVIATHAN_MK_II) ? SAY_MKII_SLAY : SAY_V07TRON_SLAY); } @@ -798,7 +798,7 @@ class boss_leviathan_mk_ii : public CreatureScript me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_HALF_HEAL); - if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON))) + if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON)) mimiron->AI()->DoAction(DO_ACTIVATE_VX001); break; case WP_MKII_P4_POS_1: @@ -808,7 +808,7 @@ class boss_leviathan_mk_ii : public CreatureScript events.ScheduleEvent(EVENT_MOVE_POINT_3, 1); break; case WP_MKII_P4_POS_3: - if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON))) + if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON)) mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_2); break; case WP_MKII_P4_POS_4: @@ -951,7 +951,7 @@ class boss_vx_001 : public CreatureScript me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); // | UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_HALF_HEAL); // has no effect, wat DoCast(me, SPELL_TORSO_DISABLED); - if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON))) + if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON)) mimiron->AI()->DoAction(DO_ACTIVATE_AERIAL); } else if (events.IsInPhase(PHASE_VOL7RON)) @@ -1022,7 +1022,7 @@ class boss_vx_001 : public CreatureScript void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) - if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON))) + if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON)) mimiron->AI()->Talk(events.IsInPhase(PHASE_VX_001) ? SAY_VX001_SLAY : SAY_V07TRON_SLAY); } @@ -1201,7 +1201,7 @@ class boss_aerial_command_unit : public CreatureScript void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) - if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON))) + if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON)) mimiron->AI()->Talk(events.IsInPhase(PHASE_AERIAL_COMMAND_UNIT) ? SAY_AERIAL_SLAY : SAY_V07TRON_SLAY); } @@ -1211,7 +1211,7 @@ class boss_aerial_command_unit : public CreatureScript { me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON))) + if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON)) mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_1); } } @@ -1435,7 +1435,7 @@ class npc_mimiron_computer : public CreatureScript { case EVENT_SELF_DESTRUCT_10: Talk(SAY_SELF_DESTRUCT_10); - if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON))) + if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON)) mimiron->AI()->DoAction(DO_ACTIVATE_HARD_MODE); events.ScheduleEvent(EVENT_SELF_DESTRUCT_9, 60000); break; @@ -1477,7 +1477,7 @@ class npc_mimiron_computer : public CreatureScript break; case EVENT_SELF_DESTRUCT_FINALIZED: Talk(SAY_SELF_DESTRUCT_FINALIZED); - if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON))) + if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON)) mimiron->AI()->DoAction(DO_ACTIVATE_SELF_DESTRUCT); DoCast(me, SPELL_SELF_DESTRUCTION_AURA); DoCast(me, SPELL_SELF_DESTRUCTION_VISUAL); @@ -1658,7 +1658,7 @@ class go_mimiron_hardmode_button : public GameObjectScript if (!instance) return false; - if (Creature* computer = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_COMPUTER))) + if (Creature* computer = instance->GetCreature(DATA_COMPUTER)) computer->AI()->DoAction(DO_ACTIVATE_COMPUTER); go->SetGoState(GO_STATE_ACTIVE); go->AddFlag(GO_FLAG_NOT_SELECTABLE); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 8a1bbfe712c..3f56f4523cc 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -189,16 +189,22 @@ class boss_razorscale_controller : public CreatureScript public: boss_razorscale_controller() : CreatureScript("boss_razorscale_controller") { } - struct boss_razorscale_controllerAI : public BossAI + struct boss_razorscale_controllerAI : public ScriptedAI { - boss_razorscale_controllerAI(Creature* creature) : BossAI(creature, DATA_RAZORSCALE_CONTROL) + boss_razorscale_controllerAI(Creature* creature) : ScriptedAI(creature), summons(me) { + instance = creature->GetInstanceScript(); me->SetDisplayFromModel(1); } + InstanceScript* instance; + EventMap events; + SummonList summons; + void Reset() override { - _Reset(); + events.Reset(); + summons.DespawnAll(); me->SetReactState(REACT_PASSIVE); } @@ -207,14 +213,14 @@ class boss_razorscale_controller : public CreatureScript switch (spell->Id) { case SPELL_FLAMED: - if (GameObject* Harpoon1 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_RAZOR_HARPOON_1))) - Harpoon1->RemoveFromWorld(); - if (GameObject* Harpoon2 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_RAZOR_HARPOON_2))) - Harpoon2->RemoveFromWorld(); - if (GameObject* Harpoon3 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_RAZOR_HARPOON_3))) - Harpoon3->RemoveFromWorld(); - if (GameObject* Harpoon4 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_RAZOR_HARPOON_4))) - Harpoon4->RemoveFromWorld(); + if (GameObject* harpoon = instance->GetGameObject(GO_RAZOR_HARPOON_1)) + harpoon->RemoveFromWorld(); + if (GameObject* harpoon = instance->GetGameObject(GO_RAZOR_HARPOON_2)) + harpoon->RemoveFromWorld(); + if (GameObject* harpoon = instance->GetGameObject(GO_RAZOR_HARPOON_3)) + harpoon->RemoveFromWorld(); + if (GameObject* harpoon = instance->GetGameObject(GO_RAZOR_HARPOON_4)) + harpoon->RemoveFromWorld(); DoAction(ACTION_HARPOON_BUILD); DoAction(ACTION_PLACE_BROKEN_HARPOON); break; @@ -229,7 +235,8 @@ class boss_razorscale_controller : public CreatureScript void JustDied(Unit* /*killer*/) override { - _JustDied(); + events.Reset(); + summons.DespawnAll(); } void DoAction(int32 action) override @@ -261,39 +268,39 @@ class boss_razorscale_controller : public CreatureScript { case EVENT_BUILD_HARPOON_1: Talk(EMOTE_HARPOON); - if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_1, PosHarpoon[0].GetPositionX(), PosHarpoon[0].GetPositionY(), PosHarpoon[0].GetPositionZ(), 4.790f, QuaternionData::fromEulerAnglesZYX(4.790f, 0.0f, 0.0f), uint32(me->GetRespawnTime()))) + if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_1, PosHarpoon[0].GetPositionX(), PosHarpoon[0].GetPositionY(), PosHarpoon[0].GetPositionZ(), 4.790f, QuaternionData::fromEulerAnglesZYX(4.790f, 0.0f, 0.0f), uint32(me->GetRespawnTime()))) { - if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) //only nearest broken harpoon - BrokenHarpoon->RemoveFromWorld(); + if (GameObject* brokenHarpoon = harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) //only nearest broken harpoon + brokenHarpoon->RemoveFromWorld(); events.ScheduleEvent(EVENT_BUILD_HARPOON_2, 20000); events.CancelEvent(EVENT_BUILD_HARPOON_1); } return; case EVENT_BUILD_HARPOON_2: Talk(EMOTE_HARPOON); - if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_2, PosHarpoon[1].GetPositionX(), PosHarpoon[1].GetPositionY(), PosHarpoon[1].GetPositionZ(), 4.659f, QuaternionData::fromEulerAnglesZYX(4.659f, 0.0f, 0.0f), uint32(me->GetRespawnTime()))) + if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_2, PosHarpoon[1].GetPositionX(), PosHarpoon[1].GetPositionY(), PosHarpoon[1].GetPositionZ(), 4.659f, QuaternionData::fromEulerAnglesZYX(4.659f, 0.0f, 0.0f), uint32(me->GetRespawnTime()))) { - if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) - BrokenHarpoon->RemoveFromWorld(); + if (GameObject* brokenHarpoon = harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) + brokenHarpoon->RemoveFromWorld(); events.CancelEvent(EVENT_BUILD_HARPOON_2); } return; case EVENT_BUILD_HARPOON_3: Talk(EMOTE_HARPOON); - if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_3, PosHarpoon[2].GetPositionX(), PosHarpoon[2].GetPositionY(), PosHarpoon[2].GetPositionZ(), 5.382f, QuaternionData::fromEulerAnglesZYX(5.382f, 0.0f, 0.0f), uint32(me->GetRespawnTime()))) + if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_3, PosHarpoon[2].GetPositionX(), PosHarpoon[2].GetPositionY(), PosHarpoon[2].GetPositionZ(), 5.382f, QuaternionData::fromEulerAnglesZYX(5.382f, 0.0f, 0.0f), uint32(me->GetRespawnTime()))) { - if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) - BrokenHarpoon->RemoveFromWorld(); + if (GameObject* brokenHarpoon = harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) + brokenHarpoon->RemoveFromWorld(); events.ScheduleEvent(EVENT_BUILD_HARPOON_4, 20000); events.CancelEvent(EVENT_BUILD_HARPOON_3); } return; case EVENT_BUILD_HARPOON_4: Talk(EMOTE_HARPOON); - if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_4, PosHarpoon[3].GetPositionX(), PosHarpoon[3].GetPositionY(), PosHarpoon[3].GetPositionZ(), 4.266f, QuaternionData::fromEulerAnglesZYX(4.266f, 0.0f, 0.0f), uint32(me->GetRespawnTime()))) + if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_4, PosHarpoon[3].GetPositionX(), PosHarpoon[3].GetPositionY(), PosHarpoon[3].GetPositionZ(), 4.266f, QuaternionData::fromEulerAnglesZYX(4.266f, 0.0f, 0.0f), uint32(me->GetRespawnTime()))) { - if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) - BrokenHarpoon->RemoveFromWorld(); + if (GameObject* brokenHarpoon = harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) + brokenHarpoon->RemoveFromWorld(); events.CancelEvent(EVENT_BUILD_HARPOON_4); } return; @@ -315,9 +322,9 @@ class go_razorscale_harpoon : public GameObjectScript bool OnGossipHello(Player* /*player*/, GameObject* go) override { - InstanceScript* instance = go->GetInstanceScript(); - if (ObjectAccessor::GetCreature(*go, instance->GetGuidData(BOSS_RAZORSCALE))) - go->AddFlag(GO_FLAG_NOT_SELECTABLE); + if (InstanceScript* instance = go->GetInstanceScript()) + if (instance->GetCreature(BOSS_RAZORSCALE)) + go->AddFlag(GO_FLAG_NOT_SELECTABLE); return false; } }; @@ -361,14 +368,14 @@ class boss_razorscale : public CreatureScript me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_PASSIVE); Initialize(); - if (Creature* commander = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXPEDITION_COMMANDER))) + if (Creature* commander = instance->GetCreature(DATA_EXPEDITION_COMMANDER)) commander->AI()->DoAction(ACTION_COMMANDER_RESET); } void EnterCombat(Unit* /*who*/) override { _EnterCombat(); - if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZORSCALE_CONTROL))) + if (Creature* controller = instance->GetCreature(DATA_RAZORSCALE_CONTROL)) controller->AI()->DoAction(ACTION_HARPOON_BUILD); me->SetSpeedRate(MOVE_FLIGHT, 3.0f); me->SetReactState(REACT_PASSIVE); @@ -383,7 +390,7 @@ class boss_razorscale : public CreatureScript void JustDied(Unit* /*killer*/) override { _JustDied(); - if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZORSCALE_CONTROL))) + if (Creature* controller = instance->GetCreature(DATA_RAZORSCALE_CONTROL)) controller->AI()->Reset(); } @@ -459,7 +466,7 @@ class boss_razorscale : public CreatureScript me->SetCanFly(false); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED)); - if (Creature* commander = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXPEDITION_COMMANDER))) + if (Creature* commander = instance->GetCreature(DATA_EXPEDITION_COMMANDER)) commander->AI()->DoAction(ACTION_GROUND_PHASE); events.ScheduleEvent(EVENT_BREATH, 30000, 0, PHASE_GROUND); events.ScheduleEvent(EVENT_BUFFET, 33000, 0, PHASE_GROUND); @@ -475,7 +482,7 @@ class boss_razorscale : public CreatureScript return; case EVENT_BUFFET: DoCastAOE(SPELL_WINGBUFFET); - if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZORSCALE_CONTROL))) + if (Creature* controller = instance->GetCreature(DATA_RAZORSCALE_CONTROL)) controller->CastSpell(controller, SPELL_FLAMED, true); events.CancelEvent(EVENT_BUFFET); return; @@ -717,10 +724,10 @@ class npc_expedition_commander : public CreatureScript Phase = 5; break; case 5: - if (Creature* Razorscale = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_RAZORSCALE))) + if (Creature* razorscale = instance->GetCreature(BOSS_RAZORSCALE)) { - Razorscale->AI()->DoAction(ACTION_EVENT_START); - me->SetInCombatWith(Razorscale); + razorscale->AI()->DoAction(ACTION_EVENT_START); + me->SetInCombatWith(razorscale); } if (Creature* firstEngineer = ObjectAccessor::GetCreature(*me, Engineer[0])) firstEngineer->AI()->Talk(SAY_AGGRO_1); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index 0366f1534ba..c6fc0925bf6 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -176,11 +176,6 @@ class boss_xt002 : public CreatureScript public: boss_xt002() : CreatureScript("boss_xt002") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetUlduarAI<boss_xt002_AI>(creature); - } - struct boss_xt002_AI : public BossAI { boss_xt002_AI(Creature* creature) : BossAI(creature, BOSS_XT002) @@ -441,6 +436,12 @@ class boss_xt002 : public CreatureScript uint8 _heartExposed; uint32 _transferHealth; }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetUlduarAI<boss_xt002_AI>(creature); + } + }; /*------------------------------------------------------- @@ -460,7 +461,7 @@ class npc_xt002_heart : public CreatureScript void JustDied(Unit* /*killer*/) override { - if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002))) + if (Creature* xt002 = _instance->GetCreature(BOSS_XT002)) { xt002->AI()->SetData(DATA_TRANSFERED_HEALTH, me->GetHealth()); xt002->AI()->DoAction(ACTION_ENTER_HARD_MODE); @@ -487,11 +488,6 @@ class npc_scrapbot : public CreatureScript public: npc_scrapbot() : CreatureScript("npc_scrapbot") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetUlduarAI<npc_scrapbotAI>(creature); - } - struct npc_scrapbotAI : public ScriptedAI { npc_scrapbotAI(Creature* creature) : ScriptedAI(creature) @@ -511,15 +507,15 @@ class npc_scrapbot : public CreatureScript Initialize(); - if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002))) - me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f); + if (Creature* xt002 = _instance->GetCreature(BOSS_XT002)) + me->GetMotionMaster()->MoveFollow(xt002, 0.0f, 0.0f); } void UpdateAI(uint32 diff) override { if (_rangeCheckTimer <= diff) { - if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002))) + if (Creature* xt002 = _instance->GetCreature(BOSS_XT002)) { if (me->IsWithinMeleeRange(xt002)) { @@ -538,6 +534,12 @@ class npc_scrapbot : public CreatureScript InstanceScript* _instance; uint32 _rangeCheckTimer; }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetUlduarAI<npc_scrapbotAI>(creature); + } + }; /*------------------------------------------------------- @@ -550,11 +552,6 @@ class npc_pummeller : public CreatureScript public: npc_pummeller() : CreatureScript("npc_pummeller") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetUlduarAI<npc_pummellerAI>(creature); - } - struct npc_pummellerAI : public ScriptedAI { npc_pummellerAI(Creature* creature) : ScriptedAI(creature) @@ -574,7 +571,7 @@ class npc_pummeller : public CreatureScript { Initialize(); - if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002))) + if (Creature* xt002 = _instance->GetCreature(BOSS_XT002)) { Position pos = xt002->GetPosition(); me->GetMotionMaster()->MovePoint(0, pos); @@ -622,6 +619,12 @@ class npc_pummeller : public CreatureScript uint32 _trampleTimer; uint32 _uppercutTimer; }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetUlduarAI<npc_pummellerAI>(creature); + } + }; /*------------------------------------------------------- @@ -657,11 +660,6 @@ class npc_boombot : public CreatureScript public: npc_boombot() : CreatureScript("npc_boombot") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetUlduarAI<npc_boombotAI>(creature); - } - struct npc_boombotAI : public ScriptedAI { npc_boombotAI(Creature* creature) : ScriptedAI(creature) @@ -682,8 +680,8 @@ class npc_boombot : public CreatureScript DoCast(SPELL_AURA_BOOMBOT); // For achievement /// @todo proper waypoints? - if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002))) - me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f); + if (Creature* xt002 = _instance->GetCreature(BOSS_XT002)) + me->GetMotionMaster()->MoveFollow(xt002, 0.0f, 0.0f); } void DamageTaken(Unit* /*who*/, uint32& damage) override @@ -723,6 +721,12 @@ class npc_boombot : public CreatureScript InstanceScript* _instance; bool _boomed; }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetUlduarAI<npc_boombotAI>(creature); + } + }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp index 6c1101d433d..79214b5b0e1 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -511,7 +511,7 @@ class boss_voice_of_yogg_saron : public CreatureScript void EnterCombat(Unit* /*who*/) override { - if (Creature* sara = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SARA))) + if (Creature* sara = instance->GetCreature(DATA_SARA)) sara->SetInCombatWith(me); for (uint8 i = DATA_FREYA_YS; i <= DATA_MIMIRON_YS; ++i) @@ -531,7 +531,7 @@ class boss_voice_of_yogg_saron : public CreatureScript void JustDied(Unit* killer) override { // don't despawn Yogg-Saron's corpse, remove him from SummonList! - if (Creature* yogg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_YOGG_SARON))) + if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON)) summons.Despawn(yogg); BossAI::JustDied(killer); @@ -556,7 +556,7 @@ class boss_voice_of_yogg_saron : public CreatureScript instance->SetBossState(BOSS_YOGG_SARON, IN_PROGRESS); break; case EVENT_EXTINGUISH_ALL_LIFE: - if (Creature* yogg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_YOGG_SARON))) + if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON)) { yogg->AI()->Talk(EMOTE_YOGG_SARON_EXTINGUISH_ALL_LIFE, me); yogg->CastSpell((Unit*)NULL, SPELL_EXTINGUISH_ALL_LIFE, true); @@ -584,7 +584,7 @@ class boss_voice_of_yogg_saron : public CreatureScript break; case EVENT_ILLUSION: { - if (Creature* yogg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_YOGG_SARON))) + if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON)) { yogg->AI()->Talk(EMOTE_YOGG_SARON_MADNESS); yogg->AI()->Talk(SAY_YOGG_SARON_MADNESS); @@ -597,7 +597,7 @@ class boss_voice_of_yogg_saron : public CreatureScript uint8 illusion = urand(CHAMBER_ILLUSION, STORMWIND_ILLUSION); instance->SetData(DATA_ILLUSION, illusion); - if (Creature* brain = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BRAIN_OF_YOGG_SARON))) + if (Creature* brain = instance->GetCreature(DATA_BRAIN_OF_YOGG_SARON)) brain->AI()->DoAction(ACTION_INDUCE_MADNESS); events.ScheduleEvent(EVENT_ILLUSION, 80000, 0, PHASE_TWO); // wowwiki says 80 secs, wowhead says something about 90 secs break; @@ -623,7 +623,7 @@ class boss_voice_of_yogg_saron : public CreatureScript case ACTION_PHASE_TWO: events.SetPhase(PHASE_TWO); me->SummonCreature(NPC_YOGG_SARON, YoggSaronSpawnPos); - if (Creature* brain = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BRAIN_OF_YOGG_SARON))) + if (Creature* brain = instance->GetCreature(DATA_BRAIN_OF_YOGG_SARON)) brain->SetInCombatWithZone(); events.ScheduleEvent(EVENT_SUMMON_CORRUPTOR_TENTACLE, 1, EVENT_GROUP_SUMMON_TENTACLES, PHASE_TWO); events.ScheduleEvent(EVENT_SUMMON_CONSTRICTOR_TENTACLE, 1, EVENT_GROUP_SUMMON_TENTACLES, PHASE_TWO); @@ -722,7 +722,7 @@ class boss_sara : public CreatureScript if (_events.IsInPhase(PHASE_ONE)) { - if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON))) + if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON)) voice->AI()->DoAction(ACTION_PHASE_TRANSFORM); Talk(SAY_SARA_TRANSFORM_1); @@ -818,14 +818,14 @@ class boss_sara : public CreatureScript Talk(SAY_SARA_TRANSFORM_4); DoCast(me, SPELL_FULL_HEAL); me->setFaction(16); - if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON))) + if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON)) voice->AI()->DoAction(ACTION_PHASE_TWO); if (Creature* mimiron = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_MIMIRON_YS))) mimiron->AI()->DoAction(ACTION_PHASE_TWO); break; case EVENT_TRANSFORM_4: DoCast(me, SPELL_PHASE_2_TRANSFORM); - if (Creature* yogg = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_YOGG_SARON))) + if (Creature* yogg = _instance->GetCreature(BOSS_YOGG_SARON)) DoCast(yogg, SPELL_RIDE_YOGG_SARON_VEHICLE); DoCast(me, SPELL_SHADOWY_BARRIER_SARA); _events.SetPhase(PHASE_TWO); @@ -881,7 +881,7 @@ class boss_sara : public CreatureScript break; } - if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON))) + if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON)) voice->AI()->JustSummoned(summon); } @@ -948,7 +948,7 @@ class boss_yogg_saron : public CreatureScript { Talk(SAY_YOGG_SARON_DEATH); - if (Creature* creature = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON))) + if (Creature* creature = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON)) me->Kill(creature); for (uint8 i = DATA_SARA; i <= DATA_BRAIN_OF_YOGG_SARON; ++i) @@ -1065,11 +1065,11 @@ class boss_brain_of_yogg_saron : public CreatureScript DoCast(me, SPELL_BRAIN_HURT_VISUAL, true); me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); - if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON))) + if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON)) voice->AI()->DoAction(ACTION_PHASE_THREE); - if (Creature* sara = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SARA))) + if (Creature* sara = _instance->GetCreature(DATA_SARA)) sara->AI()->DoAction(ACTION_PHASE_THREE); - if (Creature* yogg = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_YOGG_SARON))) + if (Creature* yogg = _instance->GetCreature(BOSS_YOGG_SARON)) yogg->AI()->DoAction(ACTION_PHASE_THREE); for (uint8 i = DATA_THORIM_YS; i <= DATA_MIMIRON_YS; ++i) @@ -1107,7 +1107,7 @@ class boss_brain_of_yogg_saron : public CreatureScript DoCastAOE(SPELL_SHATTERED_ILLUSION, true); _instance->HandleGameObject(_instance->GetGuidData(GO_BRAIN_ROOM_DOOR_1 + illusion), true); - if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON))) + if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON)) voice->AI()->DoAction(ACTION_TOGGLE_SHATTERED_ILLUSION); } break; @@ -1214,7 +1214,7 @@ class npc_guardian_of_yogg_saron : public CreatureScript return; // Guardian can be summoned both by Voice of Yogg-Saron and by Ominous Cloud - if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON))) + if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON)) voice->AI()->JustSummoned(me); } @@ -1317,7 +1317,7 @@ class npc_constrictor_tentacle : public CreatureScript void IsSummonedBy(Unit* /*summoner*/) override { - if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON))) + if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON)) voice->AI()->JustSummoned(me); } @@ -1408,7 +1408,7 @@ class npc_influence_tentacle : public CreatureScript void JustDied(Unit* /*killer*/) override { - if (Creature* brain = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_BRAIN_OF_YOGG_SARON))) + if (Creature* brain = _instance->GetCreature(DATA_BRAIN_OF_YOGG_SARON)) brain->AI()->DoAction(ACTION_TENTACLE_KILLED); } @@ -2779,7 +2779,7 @@ class spell_yogg_saron_induce_madness : public SpellScriptLoader // 64059 GetCaster()->CastSpell((Unit*)NULL, SPELL_SHATTERED_ILLUSION_REMOVE); if (InstanceScript* instance = GetCaster()->GetInstanceScript()) - if (Creature* voice = ObjectAccessor::GetCreature(*GetCaster(), instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON))) + if (Creature* voice = instance->GetCreature(DATA_VOICE_OF_YOGG_SARON)) voice->AI()->DoAction(ACTION_TOGGLE_SHATTERED_ILLUSION); } @@ -3053,7 +3053,9 @@ class spell_yogg_saron_in_the_maws_of_the_old_god : public SpellScriptLoader SpellCastResult CheckRequirement() { if (InstanceScript* instance = GetCaster()->GetInstanceScript()) - if (Creature* yogg = ObjectAccessor::GetCreature(*GetCaster(), instance->GetGuidData(BOSS_YOGG_SARON))) + { + if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON)) + { if (yogg->FindCurrentSpellBySpellId(SPELL_DEAFENING_ROAR)) { if (GetCaster()->GetDistance(yogg) > 20.0f) @@ -3061,6 +3063,8 @@ class spell_yogg_saron_in_the_maws_of_the_old_god : public SpellScriptLoader else return SPELL_CAST_OK; } + } + } return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index 3683e9f5ea3..d34a7ac516c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -79,6 +79,28 @@ MinionData const minionData[] = ObjectData const creatureData[] = { + { NPC_FLAME_LEVIATHAN, BOSS_LEVIATHAN }, + { NPC_IGNIS, BOSS_IGNIS }, + { NPC_RAZORSCALE, BOSS_RAZORSCALE }, + { NPC_XT002, BOSS_XT002 }, + { NPC_KOLOGARN, BOSS_KOLOGARN }, + { NPC_AURIAYA, BOSS_AURIAYA }, + { NPC_HODIR, BOSS_HODIR }, + { NPC_THORIM, BOSS_THORIM }, + { NPC_FREYA, BOSS_FREYA }, + { NPC_MIMIRON, BOSS_MIMIRON }, + { NPC_VEZAX, BOSS_VEZAX }, + { NPC_YOGG_SARON, BOSS_YOGG_SARON }, + { NPC_ALGALON, BOSS_ALGALON }, + + { NPC_EXPEDITION_COMMANDER, DATA_EXPEDITION_COMMANDER }, + { NPC_RAZORSCALE_CONTROLLER, DATA_RAZORSCALE_CONTROL }, + { NPC_COMPUTER, DATA_COMPUTER }, + { NPC_WORLD_TRIGGER_MIMIRON, DATA_MIMIRON_WORLD_TRIGGER }, + { NPC_VOICE_OF_YOGG_SARON, DATA_VOICE_OF_YOGG_SARON }, + { NPC_SARA, DATA_SARA }, + { NPC_BRAIN_OF_YOGG_SARON, DATA_BRAIN_OF_YOGG_SARON }, + { NPC_BRANN_BRONZBEARD_ALG, DATA_BRANN_BRONZEBEARD_ALG }, { NPC_BRANN_BRONZEBEARD_INTRO, DATA_BRANN_BRONZEBEARD_INTRO }, { NPC_LORE_KEEPER_OF_NORGANNON, DATA_LORE_KEEPER_OF_NORGANNON }, { NPC_HIGH_EXPLORER_DELLORAH, DATA_DELLORAH }, @@ -86,6 +108,19 @@ ObjectData const creatureData[] = { 0, 0, } }; +ObjectData const objectData[] = +{ + { GO_MIMIRON_ELEVATOR, DATA_MIMIRON_ELEVATOR }, + { GO_MIMIRON_BUTTON, DATA_MIMIRON_BUTTON }, + { GO_DOODAD_UL_UNIVERSEGLOBE01, DATA_UNIVERSE_GLOBE }, + { GO_DOODAD_UL_ULDUAR_TRAPDOOR_03, DATA_ALGALON_TRAPDOOR }, + { GO_RAZOR_HARPOON_1, GO_RAZOR_HARPOON_1 }, + { GO_RAZOR_HARPOON_2, GO_RAZOR_HARPOON_2 }, + { GO_RAZOR_HARPOON_3, GO_RAZOR_HARPOON_3 }, + { GO_RAZOR_HARPOON_4, GO_RAZOR_HARPOON_4 }, + { 0, 0 } +}; + class instance_ulduar : public InstanceMapScript { public: @@ -100,7 +135,7 @@ class instance_ulduar : public InstanceMapScript LoadBossBoundaries(boundaries); LoadDoorData(doorData); LoadMinionData(minionData); - LoadObjectData(creatureData, nullptr); + LoadObjectData(creatureData, objectData); _algalonTimer = 61; _maxArmorItemLevel = 0; @@ -124,51 +159,29 @@ class instance_ulduar : public InstanceMapScript } // Creatures - ObjectGuid LeviathanGUID; GuidVector LeviathanVehicleGUIDs; - ObjectGuid IgnisGUID; - ObjectGuid RazorscaleGUID; - ObjectGuid RazorscaleController; - ObjectGuid ExpeditionCommanderGUID; - ObjectGuid XT002GUID; + ObjectGuid XTToyPileGUIDs[4]; ObjectGuid AssemblyGUIDs[3]; - ObjectGuid KologarnGUID; - ObjectGuid AuriayaGUID; - ObjectGuid HodirGUID; - ObjectGuid ThorimGUID; - ObjectGuid FreyaGUID; + ObjectGuid ElderGUIDs[3]; ObjectGuid FreyaAchieveTriggerGUID; - ObjectGuid MimironGUID; ObjectGuid MimironVehicleGUIDs[3]; - ObjectGuid MimironComputerGUID; - ObjectGuid MimironWorldTriggerGUID; - ObjectGuid VezaxGUID; - ObjectGuid YoggSaronGUID; - ObjectGuid VoiceOfYoggSaronGUID; - ObjectGuid SaraGUID; - ObjectGuid BrainOfYoggSaronGUID; ObjectGuid KeeperGUIDs[4]; - ObjectGuid AlgalonGUID; - ObjectGuid BrannBronzebeardAlgGUID; // GameObjects ObjectGuid LeviathanGateGUID; - ObjectGuid RazorHarpoonGUIDs[4]; ObjectGuid KologarnChestGUID; ObjectGuid KologarnBridgeGUID; ObjectGuid ThorimChestGUID; ObjectGuid HodirRareCacheGUID; ObjectGuid HodirChestGUID; ObjectGuid MimironTramGUID; - ObjectGuid MimironElevatorGUID; - ObjectGuid MimironButtonGUID; + ObjectGuid BrainRoomDoorGUIDs[3]; ObjectGuid AlgalonSigilDoorGUID[3]; ObjectGuid AlgalonFloorGUID[2]; - ObjectGuid AlgalonUniverseGUID; - ObjectGuid AlgalonTrapdoorGUID; + ObjectGuid GiftOfTheObserverGUID; // Miscellaneous @@ -239,6 +252,8 @@ class instance_ulduar : public InstanceMapScript void OnCreatureCreate(Creature* creature) override { + InstanceScript::OnCreatureCreate(creature); + if (!TeamInInstance) { Map::PlayerList const& Players = instance->GetPlayers(); @@ -249,40 +264,22 @@ class instance_ulduar : public InstanceMapScript switch (creature->GetEntry()) { - case NPC_LEVIATHAN: - LeviathanGUID = creature->GetGUID(); - break; case NPC_SALVAGED_DEMOLISHER: case NPC_SALVAGED_SIEGE_ENGINE: case NPC_SALVAGED_CHOPPER: LeviathanVehicleGUIDs.push_back(creature->GetGUID()); break; - case NPC_IGNIS: - IgnisGUID = creature->GetGUID(); - break; - - // Razorscale - case NPC_RAZORSCALE: - RazorscaleGUID = creature->GetGUID(); - break; - case NPC_RAZORSCALE_CONTROLLER: - RazorscaleController = creature->GetGUID(); - break; - case NPC_EXPEDITION_COMMANDER: - ExpeditionCommanderGUID = creature->GetGUID(); - break; // XT-002 Deconstructor - case NPC_XT002: - XT002GUID = creature->GetGUID(); - break; case NPC_XT_TOY_PILE: for (uint8 i = 0; i < 4; ++i) + { if (!XTToyPileGUIDs[i]) { XTToyPileGUIDs[i] = creature->GetGUID(); break; } + } break; // Assembly of Iron @@ -299,17 +296,7 @@ class instance_ulduar : public InstanceMapScript AddMinion(creature, true); break; - case NPC_KOLOGARN: - KologarnGUID = creature->GetGUID(); - break; - case NPC_AURIAYA: - AuriayaGUID = creature->GetGUID(); - break; - // Hodir - case NPC_HODIR: - HodirGUID = creature->GetGUID(); - break; case NPC_EIVI_NIGHTFEATHER: if (TeamInInstance == HORDE) creature->UpdateEntry(NPC_TOR_GREYCLOUD); @@ -343,14 +330,7 @@ class instance_ulduar : public InstanceMapScript creature->UpdateEntry(NPC_BATTLE_PRIEST_GINA); break; - case NPC_THORIM: - ThorimGUID = creature->GetGUID(); - break; - // Freya - case NPC_FREYA: - FreyaGUID = creature->GetGUID(); - break; case NPC_IRONBRANCH: ElderGUIDs[0] = creature->GetGUID(); if (GetBossState(BOSS_FREYA) == DONE) @@ -371,9 +351,6 @@ class instance_ulduar : public InstanceMapScript break; // Mimiron - case NPC_MIMIRON: - MimironGUID = creature->GetGUID(); - break; case NPC_LEVIATHAN_MKII: MimironVehicleGUIDs[0] = creature->GetGUID(); break; @@ -383,30 +360,8 @@ class instance_ulduar : public InstanceMapScript case NPC_AERIAL_COMMAND_UNIT: MimironVehicleGUIDs[2] = creature->GetGUID(); break; - case NPC_COMPUTER: - MimironComputerGUID = creature->GetGUID(); - break; - case NPC_WORLD_TRIGGER_MIMIRON: - MimironWorldTriggerGUID = creature->GetGUID(); - break; - - case NPC_VEZAX: - VezaxGUID = creature->GetGUID(); - break; // Yogg-Saron - case NPC_YOGG_SARON: - YoggSaronGUID = creature->GetGUID(); - break; - case NPC_VOICE_OF_YOGG_SARON: - VoiceOfYoggSaronGUID = creature->GetGUID(); - break; - case NPC_BRAIN_OF_YOGG_SARON: - BrainOfYoggSaronGUID = creature->GetGUID(); - break; - case NPC_SARA: - SaraGUID = creature->GetGUID(); - break; case NPC_FREYA_YS: KeeperGUIDs[0] = creature->GetGUID(); _summonYSKeeper[0] = false; @@ -436,12 +391,6 @@ class instance_ulduar : public InstanceMapScript break; // Algalon - case NPC_ALGALON: - AlgalonGUID = creature->GetGUID(); - break; - case NPC_BRANN_BRONZBEARD_ALG: - BrannBronzebeardAlgGUID = creature->GetGUID(); - break; //! These creatures are summoned by something else than Algalon //! but need to be controlled/despawned by him - so they need to be //! registered in his summon list @@ -449,7 +398,7 @@ class instance_ulduar : public InstanceMapScript case NPC_ALGALON_STALKER_ASTEROID_TARGET_01: case NPC_ALGALON_STALKER_ASTEROID_TARGET_02: case NPC_UNLEASHED_DARK_MATTER: - if (Creature* algalon = instance->GetCreature(AlgalonGUID)) + if (Creature* algalon = GetCreature(BOSS_ALGALON)) algalon->AI()->JustSummoned(creature); break; } @@ -459,34 +408,34 @@ class instance_ulduar : public InstanceMapScript void OnCreatureRemove(Creature* creature) override { + InstanceScript::OnCreatureRemove(creature); + switch (creature->GetEntry()) { case NPC_XT_TOY_PILE: for (uint8 i = 0; i < 4; ++i) + { if (XTToyPileGUIDs[i] == creature->GetGUID()) { XTToyPileGUIDs[i].Clear(); break; } + } break; case NPC_STEELBREAKER: case NPC_MOLGEIM: case NPC_BRUNDIR: AddMinion(creature, false); break; - case NPC_BRANN_BRONZBEARD_ALG: - if (BrannBronzebeardAlgGUID == creature->GetGUID()) - BrannBronzebeardAlgGUID.Clear(); - break; default: break; } - - InstanceScript::OnCreatureRemove(creature); } void OnGameObjectCreate(GameObject* gameObject) override { + InstanceScript::OnGameObjectCreate(gameObject); + switch (gameObject->GetEntry()) { case GO_KOLOGARN_CHEST_HERO: @@ -513,43 +462,11 @@ class instance_ulduar : public InstanceMapScript case GO_MIMIRON_TRAM: MimironTramGUID = gameObject->GetGUID(); break; - case GO_MIMIRON_ELEVATOR: - MimironElevatorGUID = gameObject->GetGUID(); - break; - case GO_MIMIRON_BUTTON: - MimironButtonGUID = gameObject->GetGUID(); - break; case GO_LEVIATHAN_GATE: LeviathanGateGUID = gameObject->GetGUID(); if (GetBossState(BOSS_LEVIATHAN) == DONE) gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); break; - case GO_LEVIATHAN_DOOR: - case GO_XT_002_DOOR: - case GO_IRON_COUNCIL_DOOR: - case GO_ARCHIVUM_DOOR: - case GO_HODIR_ENTRANCE: - case GO_HODIR_DOOR: - case GO_HODIR_ICE_DOOR: - case GO_MIMIRON_DOOR_1: - case GO_MIMIRON_DOOR_2: - case GO_MIMIRON_DOOR_3: - case GO_VEZAX_DOOR: - case GO_YOGG_SARON_DOOR: - AddDoor(gameObject, true); - break; - case GO_RAZOR_HARPOON_1: - RazorHarpoonGUIDs[0] = gameObject->GetGUID(); - break; - case GO_RAZOR_HARPOON_2: - RazorHarpoonGUIDs[1] = gameObject->GetGUID(); - break; - case GO_RAZOR_HARPOON_3: - RazorHarpoonGUIDs[2] = gameObject->GetGUID(); - break; - case GO_RAZOR_HARPOON_4: - RazorHarpoonGUIDs[3] = gameObject->GetGUID(); - break; case GO_MOLE_MACHINE: if (GetBossState(BOSS_RAZORSCALE) == IN_PROGRESS) gameObject->SetGoState(GO_STATE_ACTIVE); @@ -580,23 +497,12 @@ class instance_ulduar : public InstanceMapScript break; case GO_DOODAD_UL_SIGILDOOR_03: AlgalonSigilDoorGUID[2] = gameObject->GetGUID(); - AddDoor(gameObject, true); break; case GO_DOODAD_UL_UNIVERSEFLOOR_01: AlgalonFloorGUID[0] = gameObject->GetGUID(); - AddDoor(gameObject, true); break; case GO_DOODAD_UL_UNIVERSEFLOOR_02: AlgalonFloorGUID[1] = gameObject->GetGUID(); - AddDoor(gameObject, true); - break; - case GO_DOODAD_UL_UNIVERSEGLOBE01: - AlgalonUniverseGUID = gameObject->GetGUID(); - AddDoor(gameObject, true); - break; - case GO_DOODAD_UL_ULDUAR_TRAPDOOR_03: - AlgalonTrapdoorGUID = gameObject->GetGUID(); - AddDoor(gameObject, true); break; case GO_GIFT_OF_THE_OBSERVER_10: case GO_GIFT_OF_THE_OBSERVER_25: @@ -607,40 +513,12 @@ class instance_ulduar : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* gameObject) override - { - switch (gameObject->GetEntry()) - { - case GO_LEVIATHAN_DOOR: - case GO_XT_002_DOOR: - case GO_IRON_COUNCIL_DOOR: - case GO_ARCHIVUM_DOOR: - case GO_HODIR_ENTRANCE: - case GO_HODIR_DOOR: - case GO_HODIR_ICE_DOOR: - case GO_MIMIRON_DOOR_1: - case GO_MIMIRON_DOOR_2: - case GO_MIMIRON_DOOR_3: - case GO_VEZAX_DOOR: - case GO_YOGG_SARON_DOOR: - case GO_DOODAD_UL_SIGILDOOR_03: - case GO_DOODAD_UL_UNIVERSEFLOOR_01: - case GO_DOODAD_UL_UNIVERSEFLOOR_02: - case GO_DOODAD_UL_UNIVERSEGLOBE01: - case GO_DOODAD_UL_ULDUAR_TRAPDOOR_03: - AddDoor(gameObject, false); - break; - default: - break; - } - } - void OnUnitDeath(Unit* unit) override { // Champion/Conqueror of Ulduar if (unit->GetTypeId() == TYPEID_PLAYER) { - for (uint8 i = 0; i < BOSS_ALGALON; i++) + for (uint8 i = 0; i < BOSS_ALGALON; ++i) { if (GetBossState(i) == IN_PROGRESS) { @@ -686,27 +564,27 @@ class instance_ulduar : public InstanceMapScript void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId) override { - // Flame Leviathan's Tower Event triggers - Creature* FlameLeviathan = instance->GetCreature(LeviathanGUID); - switch (eventId) { + // Flame Leviathan's Tower Event triggers case EVENT_TOWER_OF_STORM_DESTROYED: - if (FlameLeviathan && FlameLeviathan->IsAlive()) - FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_STORM_DESTROYED); + if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN)) + flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_STORM_DESTROYED); break; case EVENT_TOWER_OF_FROST_DESTROYED: - if (FlameLeviathan && FlameLeviathan->IsAlive()) - FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FROST_DESTROYED); + if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN)) + flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FROST_DESTROYED); break; case EVENT_TOWER_OF_FLAMES_DESTROYED: - if (FlameLeviathan && FlameLeviathan->IsAlive()) - FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FLAMES_DESTROYED); + if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN)) + flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FLAMES_DESTROYED); break; case EVENT_TOWER_OF_LIFE_DESTROYED: - if (FlameLeviathan && FlameLeviathan->IsAlive()) - FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_LIFE_DESTROYED); + if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN)) + flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_LIFE_DESTROYED); break; + + // Yogg-Saron Event triggers case EVENT_ACTIVATE_SANITY_WELL: if (Creature* freya = instance->GetCreature(KeeperGUIDs[0])) freya->AI()->DoAction(4/*ACTION_SANITY_WELLS*/); @@ -851,9 +729,9 @@ class instance_ulduar : public InstanceMapScript HodirRareCacheData = data; if (!HodirRareCacheData) { - if (Creature* Hodir = instance->GetCreature(HodirGUID)) + if (Creature* hodir = GetCreature(BOSS_HODIR)) if (GameObject* gameObject = instance->GetGameObject(HodirRareCacheGUID)) - Hodir->RemoveGameObject(gameObject, false); + hodir->RemoveGameObject(gameObject, false); } break; case DATA_UNBROKEN: @@ -888,30 +766,7 @@ class instance_ulduar : public InstanceMapScript { switch (data) { - case BOSS_LEVIATHAN: - return LeviathanGUID; - case BOSS_IGNIS: - return IgnisGUID; - - // Razorscale - case BOSS_RAZORSCALE: - return RazorscaleGUID; - case DATA_RAZORSCALE_CONTROL: - return RazorscaleController; - case DATA_EXPEDITION_COMMANDER: - return ExpeditionCommanderGUID; - case GO_RAZOR_HARPOON_1: - return RazorHarpoonGUIDs[0]; - case GO_RAZOR_HARPOON_2: - return RazorHarpoonGUIDs[1]; - case GO_RAZOR_HARPOON_3: - return RazorHarpoonGUIDs[2]; - case GO_RAZOR_HARPOON_4: - return RazorHarpoonGUIDs[3]; - // XT-002 Deconstructor - case BOSS_XT002: - return XT002GUID; case DATA_TOY_PILE_0: case DATA_TOY_PILE_1: case DATA_TOY_PILE_2: @@ -926,18 +781,7 @@ class instance_ulduar : public InstanceMapScript case DATA_BRUNDIR: return AssemblyGUIDs[2]; - case BOSS_KOLOGARN: - return KologarnGUID; - case BOSS_AURIAYA: - return AuriayaGUID; - case BOSS_HODIR: - return HodirGUID; - case BOSS_THORIM: - return ThorimGUID; - // Freya - case BOSS_FREYA: - return FreyaGUID; case BOSS_BRIGHTLEAF: return ElderGUIDs[0]; case BOSS_IRONBRANCH: @@ -946,35 +790,14 @@ class instance_ulduar : public InstanceMapScript return ElderGUIDs[2]; // Mimiron - case BOSS_MIMIRON: - return MimironGUID; case DATA_LEVIATHAN_MK_II: return MimironVehicleGUIDs[0]; case DATA_VX_001: return MimironVehicleGUIDs[1]; case DATA_AERIAL_COMMAND_UNIT: return MimironVehicleGUIDs[2]; - case DATA_COMPUTER: - return MimironComputerGUID; - case DATA_MIMIRON_WORLD_TRIGGER: - return MimironWorldTriggerGUID; - case DATA_MIMIRON_ELEVATOR: - return MimironElevatorGUID; - case DATA_MIMIRON_BUTTON: - return MimironButtonGUID; - - case BOSS_VEZAX: - return VezaxGUID; // Yogg-Saron - case BOSS_YOGG_SARON: - return YoggSaronGUID; - case DATA_VOICE_OF_YOGG_SARON: - return VoiceOfYoggSaronGUID; - case DATA_BRAIN_OF_YOGG_SARON: - return BrainOfYoggSaronGUID; - case DATA_SARA: - return SaraGUID; case GO_BRAIN_ROOM_DOOR_1: return BrainRoomDoorGUIDs[0]; case GO_BRAIN_ROOM_DOOR_2: @@ -991,8 +814,6 @@ class instance_ulduar : public InstanceMapScript return KeeperGUIDs[3]; // Algalon - case BOSS_ALGALON: - return AlgalonGUID; case DATA_SIGILDOOR_01: return AlgalonSigilDoorGUID[0]; case DATA_SIGILDOOR_02: @@ -1003,15 +824,9 @@ class instance_ulduar : public InstanceMapScript return AlgalonFloorGUID[0]; case DATA_UNIVERSE_FLOOR_02: return AlgalonFloorGUID[1]; - case DATA_UNIVERSE_GLOBE: - return AlgalonUniverseGUID; - case DATA_ALGALON_TRAPDOOR: - return AlgalonTrapdoorGUID; - case DATA_BRANN_BRONZEBEARD_ALG: - return BrannBronzebeardAlgGUID; } - return ObjectGuid::Empty; + return InstanceScript::GetGuidData(data); } uint32 GetData(uint32 type) const override @@ -1179,7 +994,7 @@ class instance_ulduar : public InstanceMapScript { DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 0); _events.CancelEvent(EVENT_UPDATE_ALGALON_TIMER); - if (Creature* algalon = instance->GetCreature(AlgalonGUID)) + if (Creature* algalon = GetCreature(BOSS_ALGALON)) algalon->AI()->DoAction(EVENT_DESPAWN_ALGALON); } break; @@ -1200,8 +1015,8 @@ class instance_ulduar : public InstanceMapScript } break; case EVENT_LEVIATHAN_BREAK_DOOR: - if (Creature* Leviathan = instance->GetCreature(LeviathanGUID)) - Leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION); + if (Creature* leviathan = GetCreature(BOSS_LEVIATHAN)) + leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION); if (GameObject* gameObject = instance->GetGameObject(LeviathanGateGUID)) gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); break; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h index 74adb6d1d13..a26b699b396 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h @@ -279,7 +279,7 @@ enum UlduarGameObjects GO_GIFT_OF_THE_OBSERVER_25 = 194822, }; -enum EventIds +enum UUEventIds { EVENT_TOWER_OF_STORM_DESTROYED = 21031, EVENT_TOWER_OF_FROST_DESTROYED = 21032, diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index e7f17a1033b..0e42a431d93 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -58,7 +58,7 @@ public: me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); float x, y, z; - me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 0.1f); + me->GetClosePoint(x, y, z, me->GetCombatReach() / 3, 0.1f); if (Creature* summon = me->SummonCreature(NPC_RAGECLAW, x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1000)) { @@ -183,7 +183,7 @@ public: void Reset() override { float x, y, z; - me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 25.0f); + me->GetClosePoint(x, y, z, me->GetCombatReach() / 3, 25.0f); me->GetMotionMaster()->MovePoint(0, x, y, z); } diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp index e2e8a6bbef7..50fbd937d53 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp @@ -351,6 +351,8 @@ public: Talk(SUFF_SAY_RECAP); me->AttackStop(); me->SetReactState(REACT_PASSIVE); + events.Reset(); + me->InterruptNonMeleeSpells(false); me->GetMotionMaster()->MovePoint(RELIQUARY_DESPAWN_WAYPOINT, DespawnPoint); } } @@ -479,6 +481,8 @@ public: Talk(DESI_SAY_RECAP); me->AttackStop(); me->SetReactState(REACT_PASSIVE); + events.Reset(); + me->InterruptNonMeleeSpells(false); me->GetMotionMaster()->MovePoint(RELIQUARY_DESPAWN_WAYPOINT, DespawnPoint); } } @@ -743,7 +747,7 @@ class spell_reliquary_of_souls_aura_of_desire : public SpellScriptLoader caster->CastCustomSpell(SPELL_AURA_OF_DESIRE_DAMAGE, SPELLVALUE_BASE_POINT0, bp, caster, true, nullptr, aurEff); } - void UpdateAmount(AuraEffect const* /*effect*/) + void UpdateAmount(AuraEffect* /*aurEff*/) { if (AuraEffect* effect = GetAura()->GetEffect(EFFECT_1)) effect->ChangeAmount(effect->GetAmount() - 5); @@ -752,7 +756,7 @@ class spell_reliquary_of_souls_aura_of_desire : public SpellScriptLoader void Register() override { OnEffectProc += AuraEffectProcFn(spell_reliquary_of_souls_aura_of_desire_AuraScript::OnProcSpell, EFFECT_0, SPELL_AURA_MOD_HEALING_PCT); - OnEffectPeriodic += AuraEffectPeriodicFn(spell_reliquary_of_souls_aura_of_desire_AuraScript::UpdateAmount, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_reliquary_of_souls_aura_of_desire_AuraScript::UpdateAmount, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp index 515039e987b..8cd4bbc9cf0 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp @@ -55,7 +55,7 @@ ObjectData const gameObjectData[] = { 0, 0 } //END }; -static DataTypes const collapseObjectDatas[] = +static MLDataTypes const collapseObjectDatas[] = { DATA_MAGTHERIDON_COLUMN_0, DATA_MAGTHERIDON_COLUMN_1, @@ -116,7 +116,7 @@ class instance_magtheridons_lair : public InstanceMapScript HandleGameObject(ObjectGuid::Empty, value == ACTION_ENABLE ? true : false, hall); break; case DATA_COLLAPSE_2: - for (DataTypes data : collapseObjectDatas) + for (MLDataTypes data : collapseObjectDatas) if (GameObject* go = GetGameObject(data)) HandleGameObject(ObjectGuid::Empty, value == ACTION_ENABLE ? true : false, go); break; diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h index 4e46ecd98e7..87190d446b0 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h @@ -25,7 +25,7 @@ uint32 const EncounterCount = 1; -enum DataTypes +enum MLDataTypes { DATA_MAGTHERIDON = 0, DATA_WORLD_TRIGGER = 1, @@ -42,13 +42,13 @@ enum DataTypes DATA_CALL_WARDERS = 12 }; -enum Actions +enum MLActions { ACTION_ENABLE = 1, ACTION_DISABLE = 2 }; -enum CreatureIds +enum MLCreatureIds { NPC_MAGTHERIDON = 17257, NPC_ABYSSAL = 17454, @@ -61,7 +61,7 @@ enum CreatureIds NPC_HELLFIRE_WARDER = 18829 }; -enum GameObjectIds +enum MLGameObjectIds { GO_MAGTHERIDON_DOOR = 183847, GO_MANTICRON_CUBE = 181713, diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index a482096ce7c..a8bd85023a2 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -525,7 +525,7 @@ public: Tapped = true; float x, y, z; - caster->GetClosePoint(x, y, z, me->GetObjectSize()); + caster->GetClosePoint(x, y, z, me->GetCombatReach()); me->SetWalk(false); me->GetMotionMaster()->MovePoint(1, x, y, z); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 7adb0d0d4cf..eb800765b7c 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -4207,42 +4207,6 @@ class spell_gen_pony_mount_check : public SpellScriptLoader } }; -class spell_gen_shroud_of_death : public SpellScriptLoader -{ -public: - spell_gen_shroud_of_death() : SpellScriptLoader("spell_gen_shroud_of_death") { } - - class spell_gen_shroud_of_death_AuraScript : public AuraScript - { - PrepareAuraScript(spell_gen_shroud_of_death_AuraScript); - - void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - PreventDefaultAction(); - GetUnitOwner()->m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST); - GetUnitOwner()->m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST); - } - - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - PreventDefaultAction(); - GetUnitOwner()->m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE); - GetUnitOwner()->m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE); - } - - void Register() override - { - OnEffectApply += AuraEffectApplyFn(spell_gen_shroud_of_death_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - OnEffectRemove += AuraEffectRemoveFn(spell_gen_shroud_of_death_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_gen_shroud_of_death_AuraScript(); - } -}; - // 169869 - Transformation Sickness class spell_gen_decimatus_transformation_sickness : public SpellScriptLoader { @@ -4568,7 +4532,6 @@ void AddSC_generic_spell_scripts() new spell_gen_landmine_knockback_achievement(); new spell_gen_clear_debuffs(); new spell_gen_pony_mount_check(); - new spell_gen_shroud_of_death(); new spell_gen_decimatus_transformation_sickness(); new spell_gen_anetheron_summon_towering_infernal(); new spell_gen_mark_of_kazrogal_hellfire(); diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 9836318f066..7461e52e1b4 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -1100,6 +1100,46 @@ class spell_item_gnomish_death_ray : public SpellScriptLoader } }; +// Item 10721: Gnomish Harm Prevention Belt +// 13234 - Harm Prevention Belt +enum HarmPreventionBelt +{ + SPELL_FORCEFIELD_COLLAPSE = 13235 +}; + +class spell_item_harm_prevention_belt : public SpellScriptLoader +{ +public: + spell_item_harm_prevention_belt() : SpellScriptLoader("spell_item_harm_prevention_belt") { } + + class spell_item_harm_prevention_belt_AuraScript : public AuraScript + { + PrepareAuraScript(spell_item_harm_prevention_belt_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_FORCEFIELD_COLLAPSE)) + return false; + return true; + } + + void HandleProc(ProcEventInfo& /*eventInfo*/) + { + GetTarget()->CastSpell((Unit*)nullptr, SPELL_FORCEFIELD_COLLAPSE, true); + } + + void Register() override + { + OnProc += AuraProcFn(spell_item_harm_prevention_belt_AuraScript::HandleProc); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_item_harm_prevention_belt_AuraScript(); + } +}; + enum Heartpierce { SPELL_INVIGORATION_MANA = 71881, @@ -4839,6 +4879,7 @@ void AddSC_item_spell_scripts() new spell_item_flask_of_the_north(); new spell_item_frozen_shadoweave(); new spell_item_gnomish_death_ray(); + new spell_item_harm_prevention_belt(); new spell_item_heartpierce<SPELL_INVIGORATION_ENERGY, SPELL_INVIGORATION_MANA, SPELL_INVIGORATION_RAGE, SPELL_INVIGORATION_RP>("spell_item_heartpierce"); new spell_item_heartpierce<SPELL_INVIGORATION_ENERGY_HERO, SPELL_INVIGORATION_MANA_HERO, SPELL_INVIGORATION_RAGE_HERO, SPELL_INVIGORATION_RP_HERO>("spell_item_heartpierce_hero"); new spell_item_crystal_spire_of_karabor(); diff --git a/src/server/scripts/Spells/spell_pet.cpp b/src/server/scripts/Spells/spell_pet.cpp index c0b570cbf46..7aaba87a2da 100644 --- a/src/server/scripts/Spells/spell_pet.cpp +++ b/src/server/scripts/Spells/spell_pet.cpp @@ -314,7 +314,7 @@ public: { if (AuraEffect* /* aurEff */ect = owner->GetAuraEffect(56246, EFFECT_0)) { - float base_attPower = pet->GetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE) * pet->GetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_PCT); + float base_attPower = pet->GetFlatModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE) * pet->GetPctModifierValue(UNIT_MOD_ATTACK_POWER, BASE_PCT); amount += CalculatePct(amount+base_attPower, /* aurEff */ect->GetAmount()); } } diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp index 98814128a34..c0e1fdaae33 100644 --- a/src/server/scripts/World/go_scripts.cpp +++ b/src/server/scripts/World/go_scripts.cpp @@ -361,7 +361,7 @@ public: uint32 BirdEntry = 0; float fX, fY, fZ; - go->GetClosePoint(fX, fY, fZ, go->GetObjectSize(), INTERACTION_DISTANCE); + go->GetClosePoint(fX, fY, fZ, go->GetCombatReach(), INTERACTION_DISTANCE); switch (go->GetEntry()) { diff --git a/src/server/scripts/World/item_scripts.cpp b/src/server/scripts/World/item_scripts.cpp index 55b7d571d56..628ca0edcae 100644 --- a/src/server/scripts/World/item_scripts.cpp +++ b/src/server/scripts/World/item_scripts.cpp @@ -243,7 +243,7 @@ public: return true; float x, y, z; - go->GetClosePoint(x, y, z, go->GetObjectSize() / 3, 7.0f); + go->GetClosePoint(x, y, z, go->GetCombatReach() / 3, 7.0f); go->SummonGameObject(GO_HIGH_QUALITY_FUR, *go, QuaternionData::fromEulerAnglesZYX(go->GetOrientation(), 0.0f, 0.0f), 1); if (TempSummon* summon = player->SummonCreature(NPC_NESINGWARY_TRAPPER, x, y, z, go->GetOrientation(), TEMPSUMMON_DEAD_DESPAWN, 1000)) { |
