diff options
author | jackpoz <giacomopoz@gmail.com> | 2014-09-07 20:08:05 +0200 |
---|---|---|
committer | jackpoz <giacomopoz@gmail.com> | 2014-09-07 20:12:54 +0200 |
commit | df7f188cfe1b407520549f7374bfd070d83140e5 (patch) | |
tree | c21f0eb0120682d2bbae9714223958a65a6985ae | |
parent | 62cfca23cec79e9804bb02111c722d8b566a9e5a (diff) |
Core/Misc: Refactor scripts to fix static analysis warnings
Fourth batch of fixes targeting 100 issues reported by Coverity
59 files changed, 767 insertions, 265 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp index 1a97f668558..9a6d0e9c224 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp @@ -75,6 +75,9 @@ public: { Initialize(); + Breath1_Spell = 0; + Breath2_Spell = 0; + // Select the 2 breaths that we are going to use until despawned // 5 possiblities for the first breath, 4 for the second, 20 total possiblites // This way we don't end up casting 2 of the same breath diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp index 9084a6b0371..7ce11653567 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp @@ -81,6 +81,9 @@ public: Initialize(); instance = creature->GetInstanceScript(); Intro = true; + RainBones = false; + Skeletons = false; + FlyTimer = 0; } void Initialize() diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp index ce8223c90cf..7b51b61ba0a 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp @@ -1068,6 +1068,7 @@ public: EntryYellTimer = 1000; AggroYellTimer = 10000; IsFakingDeath = false; + ResurrectTimer = 0; } void Initialize() diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index 307bcd5add6..0733640f4c3 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -391,6 +391,10 @@ public: Initialize(); instance = creature->GetInstanceScript(); headGUID = 0; + PlayerGUID = 0; + id = 0; + whirlwind = 0; + wp_reached = false; } void Initialize() diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index 5df2d683e21..79ebfa7b62b 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -503,6 +503,7 @@ public: { Initialize(); instance = creature->GetInstanceScript(); + speechPhaseEnd = 0; SetCombatMovement(false); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index ec0bae0f27f..823423fc3a8 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -301,10 +301,19 @@ public: { npc_muru_portalAI(Creature* creature) : ScriptedAI(creature), Summons(creature) { + Initialize(); SetCombatMovement(false); instance = creature->GetInstanceScript(); } + void Initialize() + { + SummonTimer = 5000; + + InAction = false; + SummonSentinel = false; + } + InstanceScript* instance; SummonList Summons; @@ -316,10 +325,7 @@ public: void Reset() override { - SummonTimer = 5000; - - InAction = false; - SummonSentinel = false; + Initialize(); me->AddUnitState(UNIT_STATE_STUNNED); @@ -383,15 +389,23 @@ public: struct npc_dark_fiendAI : public ScriptedAI { - npc_dark_fiendAI(Creature* creature) : ScriptedAI(creature) { } + npc_dark_fiendAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + WaitTimer = 2000; + InAction = false; + } uint32 WaitTimer; bool InAction; void Reset() override { - WaitTimer = 2000; - InAction = false; + Initialize(); me->AddUnitState(UNIT_STATE_STUNNED); } @@ -444,15 +458,23 @@ public: struct npc_void_sentinelAI : public ScriptedAI { - npc_void_sentinelAI(Creature* creature) : ScriptedAI(creature) { } + npc_void_sentinelAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + PulseTimer = 3000; + VoidBlastTimer = 45000; //is this a correct timer? + } uint32 PulseTimer; uint32 VoidBlastTimer; void Reset() override { - PulseTimer = 3000; - VoidBlastTimer = 45000; //is this a correct timer? + Initialize(); float x, y, z, o; me->GetHomePosition(x, y, z, o); @@ -502,9 +524,18 @@ public: { npc_blackholeAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + DespawnTimer = 15000; + SpellTimer = 5000; + Phase = 0; + NeedForAHack = 0; + } + InstanceScript* instance; uint32 DespawnTimer; @@ -514,10 +545,7 @@ public: void Reset() override { - DespawnTimer = 15000; - SpellTimer = 5000; - Phase = 0; - NeedForAHack = 0; + Initialize(); me->AddUnitState(UNIT_STATE_STUNNED); DoCastAOE(SPELL_BLACKHOLE_SPAWN, true); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp index 34b55da72de..a7fa54b12e1 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp @@ -335,6 +335,7 @@ hyjalAI::hyjalAI(Creature* creature) : npc_escortAI(creature), Summons(me) DoRespawn = false; MassTeleportTimer = 0; DoMassTeleport = false; + DummyGuid = 0; } void hyjalAI::Initialize() diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp index a98f3843d97..b916f93aef7 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp @@ -69,9 +69,6 @@ public: uint32 SpawnHatchlings_Timer; uint32 SpawnSpawns_Timer; - Creature* Hatchling; - Creature* Spawn; - void Reset() override { Initialize(); @@ -99,7 +96,7 @@ public: case 1: RandY = 0.0f + Rand; break; } Rand = 0; - Spawn = DoSpawnCreature(15630, RandX, RandY, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); + Creature* Spawn = DoSpawnCreature(15630, RandX, RandY, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); if (Spawn) Spawn->AI()->AttackStart(victim); } @@ -155,6 +152,7 @@ public: if (DoGetThreat(target)) DoModifyThreatPercent(target, -100); + Creature* Hatchling = nullptr; switch (urand(0, 2)) { case 0: @@ -174,7 +172,7 @@ public: break; case 1: DoTeleportPlayer(target, -7990.135354f, 1155.1907f, -78.849319f, 2.608f); - Hatchling = me->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()-3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); + Hatchling = me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() - 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); if (Hatchling) Hatchling->AI()->AttackStart(target); Hatchling = me->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()+3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); @@ -189,7 +187,7 @@ public: break; case 2: DoTeleportPlayer(target, -8159.7753f, 1127.9064f, -76.868660f, 0.675f); - Hatchling = me->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()-3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); + Hatchling = me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() - 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); if (Hatchling) Hatchling->AI()->AttackStart(target); Hatchling = me->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()+3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index cd250a50fb7..e65dbacc1f2 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -417,8 +417,6 @@ public: uint32 UnbalancingStrike_Timer; uint32 Scarabs_Timer; - Creature* Summoned; - void Reset() override { TwinReset(); @@ -509,8 +507,6 @@ public: uint32 ArcaneBurst_Timer; uint32 Scorpions_Timer; - Creature* Summoned; - void Reset() override { TwinReset(); diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp index 0a712b69771..58d7c6141b4 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp @@ -161,19 +161,25 @@ struct dummy_dragonAI : public ScriptedAI { dummy_dragonAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + waypointId = 0; + portalRespawnTime = 30000; + _canMoveFree = false; + _canLoot = true; + } + void Reset() override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); events.Reset(); - waypointId = 0; - portalRespawnTime = 30000; - _canMoveFree = false; - _canLoot = true; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp index 0c96a982997..4e02b3ad2e8 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp @@ -73,15 +73,21 @@ class boss_baltharus_the_warborn : public CreatureScript { boss_baltharus_the_warbornAI(Creature* creature) : BossAI(creature, DATA_BALTHARUS_THE_WARBORN) { + Initialize(); _introDone = false; } + void Initialize() + { + _cloneCount = RAID_MODE<uint8>(1, 2, 2, 2); + } + void Reset() override { _Reset(); events.SetPhase(PHASE_INTRO); events.ScheduleEvent(EVENT_OOC_CHANNEL, 0, 0, PHASE_INTRO); - _cloneCount = RAID_MODE<uint8>(1, 2, 2, 2); + Initialize(); instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetMaxHealth()); } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp index b5c20e95278..e41ea8de38b 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp @@ -204,12 +204,18 @@ class npc_onyx_flamecaller : public CreatureScript { npc_onyx_flamecallerAI(Creature* creature) : npc_escortAI(creature), _instance(creature->GetInstanceScript()) { + Initialize(); npc_escortAI::SetDespawnAtEnd(false); } - void Reset() override + void Initialize() { _lavaGoutCount = 0; + } + + void Reset() override + { + Initialize(); me->setActive(true); AddWaypoints(); Start(true, true); diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index d08c6f66903..dbf3a185120 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -596,16 +596,22 @@ class npc_halion_controller : public CreatureScript npc_halion_controllerAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()), _summons(me) { + Initialize(); me->SetPhaseMask(me->GetPhaseMask() | 0x20, true); } - void Reset() override + void Initialize() { - _summons.DespawnAll(); - _events.Reset(); _materialCorporealityValue = 5; _materialDamageTaken = 0; _twilightDamageTaken = 0; + } + + void Reset() override + { + _summons.DespawnAll(); + _events.Reset(); + Initialize(); DoCast(me, SPELL_CLEAR_DEBUFFS); } @@ -1208,13 +1214,22 @@ class npc_living_ember : public CreatureScript struct npc_living_emberAI : public ScriptedAI { - npc_living_emberAI(Creature* creature) : ScriptedAI(creature) { } + npc_living_emberAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + _enrageTimer = 0; + } - void Reset() override + void Initialize() { _hasEnraged = false; } + void Reset() override + { + Initialize(); + } + void EnterCombat(Unit* /*who*/) override { _enrageTimer = 20000; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp index 28bf3a3d531..be756a8ab36 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp @@ -54,6 +54,7 @@ class instance_ruby_sanctum : public InstanceMapScript BaltharusSharedHealth = 0; FlameWallsGUID = 0; FlameRingGUID = 0; + TwilightFlameRingGUID = 0; memset(ZarithrianSpawnStalkerGUID, 0, 2 * sizeof(uint64)); memset(BurningTreeGUID, 0, 4 * sizeof(uint64)); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index 7e9e351ae9c..f2d2c3e3d5b 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -156,11 +156,22 @@ public: { boss_eadricAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); creature->SetReactState(REACT_PASSIVE); creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } + void Initialize() + { + uiVenganceTimer = 10000; + uiRadianceTimer = 16000; + uiHammerJusticeTimer = 25000; + uiResetTimer = 5000; + + bDone = false; + } + InstanceScript* instance; uint32 uiVenganceTimer; @@ -172,12 +183,7 @@ public: void Reset() override { - uiVenganceTimer = 10000; - uiRadianceTimer = 16000; - uiHammerJusticeTimer = 25000; - uiResetTimer = 5000; - - bDone = false; + Initialize(); } void DamageTaken(Unit* /*done_by*/, uint32 &damage) override @@ -260,6 +266,7 @@ public: { boss_paletressAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); MemoryGUID = 0; @@ -268,6 +275,18 @@ public: creature->RestoreFaction(); } + void Initialize() + { + uiHolyFireTimer = urand(9000, 12000); + uiHolySmiteTimer = urand(5000, 7000); + uiRenewTimer = urand(2000, 5000); + + uiResetTimer = 7000; + + bHealth = false; + bDone = false; + } + InstanceScript* instance; uint64 MemoryGUID; @@ -283,14 +302,7 @@ public: { me->RemoveAllAuras(); - uiHolyFireTimer = urand(9000, 12000); - uiHolySmiteTimer = urand(5000, 7000); - uiRenewTimer = urand(2000, 5000); - - uiResetTimer = 7000; - - bHealth = false; - bDone = false; + Initialize(); if (Creature* pMemory = ObjectAccessor::GetCreature(*me, MemoryGUID)) if (pMemory->IsAlive()) @@ -415,7 +427,17 @@ public: struct npc_memoryAI : public ScriptedAI { - npc_memoryAI(Creature* creature) : ScriptedAI(creature) { } + npc_memoryAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + uiOldWoundsTimer = 12000; + uiShadowPastTimer = 5000; + uiWakingNightmare = 7000; + } uint32 uiOldWoundsTimer; uint32 uiShadowPastTimer; @@ -423,9 +445,7 @@ public: void Reset() override { - uiOldWoundsTimer = 12000; - uiShadowPastTimer = 5000; - uiWakingNightmare = 7000; + Initialize(); } void UpdateAI(uint32 uiDiff) override diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index a8aff70b034..e342b3bbfb1 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -83,9 +83,31 @@ public: { boss_black_knightAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + bEventInProgress = false; + bEvent = false; + bSummonArmy = false; + bDeathArmyDone = false; + + uiPhase = PHASE_UNDEAD; + + uiIcyTouchTimer = urand(5000, 9000); + uiPlagueStrikeTimer = urand(10000, 13000); + uiDeathRespiteTimer = urand(15000, 16000); + uiObliterateTimer = urand(17000, 19000); + uiDesecration = urand(15000, 16000); + uiDeathArmyCheckTimer = 7000; + uiResurrectTimer = 4000; + uiGhoulExplodeTimer = 8000; + uiDeathBiteTimer = urand(2000, 4000); + uiMarkedDeathTimer = urand(5000, 7000); + } + InstanceScript* instance; std::list<uint64> SummonList; @@ -114,23 +136,7 @@ public: me->SetDisplayId(me->GetNativeDisplayId()); me->ClearUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED); - bEventInProgress = false; - bEvent = false; - bSummonArmy = false; - bDeathArmyDone = false; - - uiPhase = PHASE_UNDEAD; - - uiIcyTouchTimer = urand(5000, 9000); - uiPlagueStrikeTimer = urand(10000, 13000); - uiDeathRespiteTimer = urand(15000, 16000); - uiObliterateTimer = urand(17000, 19000); - uiDesecration = urand(15000, 16000); - uiDeathArmyCheckTimer = 7000; - uiResurrectTimer = 4000; - uiGhoulExplodeTimer = 8000; - uiDeathBiteTimer = urand(2000, 4000); - uiMarkedDeathTimer = urand(5000, 7000); + Initialize(); } void RemoveSummons() @@ -310,13 +316,21 @@ public: struct npc_risen_ghoulAI : public ScriptedAI { - npc_risen_ghoulAI(Creature* creature) : ScriptedAI(creature) { } + npc_risen_ghoulAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + uiAttackTimer = 3500; + } uint32 uiAttackTimer; void Reset() override { - uiAttackTimer = 3500; + Initialize(); } void UpdateAI(uint32 uiDiff) override diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index 7dd935e86f0..027238be6d3 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -155,12 +155,20 @@ public: { generic_vehicleAI_toc5AI(Creature* creature) : npc_escortAI(creature) { + Initialize(); SetDespawnAtEnd(false); uiWaypointPath = 0; instance = creature->GetInstanceScript(); } + void Initialize() + { + uiChargeTimer = 5000; + uiShieldBreakerTimer = 8000; + uiBuffTimer = urand(30000, 60000); + } + InstanceScript* instance; uint32 uiChargeTimer; @@ -171,9 +179,7 @@ public: void Reset() override { - uiChargeTimer = 5000; - uiShieldBreakerTimer = 8000; - uiBuffTimer = urand(30000, 60000); + Initialize(); } void SetData(uint32 uiType, uint32 /*uiData*/) override @@ -311,6 +317,7 @@ public: { boss_warrior_toc5AI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); bDone = false; @@ -324,6 +331,13 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); } + void Initialize() + { + uiBladeStormTimer = urand(15000, 20000); + uiInterceptTimer = 7000; + uiMortalStrikeTimer = urand(8000, 12000); + } + InstanceScript* instance; uint8 uiPhase; @@ -339,9 +353,7 @@ public: void Reset() override { - uiBladeStormTimer = urand(15000, 20000); - uiInterceptTimer = 7000; - uiMortalStrikeTimer = urand(8000, 12000); + Initialize(); } void JustReachedHome() override @@ -443,6 +455,7 @@ public: { boss_mage_toc5AI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); bDone = false; @@ -456,6 +469,14 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); } + void Initialize() + { + uiFireBallTimer = 5000; + uiPolymorphTimer = 8000; + uiBlastWaveTimer = 12000; + uiHasteTimer = 22000; + } + InstanceScript* instance; uint8 uiPhase; @@ -471,10 +492,7 @@ public: void Reset() override { - uiFireBallTimer = 5000; - uiPolymorphTimer = 8000; - uiBlastWaveTimer = 12000; - uiHasteTimer = 22000; + Initialize(); } void JustReachedHome() override @@ -580,6 +598,7 @@ public: { boss_shaman_toc5AI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); bDone = false; @@ -593,6 +612,14 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); } + void Initialize() + { + uiChainLightningTimer = 16000; + uiHealingWaveTimer = 12000; + uiEartShieldTimer = urand(30000, 35000); + uiHexMendingTimer = urand(20000, 25000); + } + InstanceScript* instance; uint8 uiPhase; @@ -608,10 +635,7 @@ public: void Reset() override { - uiChainLightningTimer = 16000; - uiHealingWaveTimer = 12000; - uiEartShieldTimer = urand(30000, 35000); - uiHexMendingTimer = urand(20000, 25000); + Initialize(); } void EnterCombat(Unit* who) override @@ -725,6 +749,7 @@ public: { boss_hunter_toc5AI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); bDone = false; @@ -738,6 +763,17 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); } + void Initialize() + { + uiShootTimer = 12000; + uiMultiShotTimer = 0; + uiLightningArrowsTimer = 7000; + + uiTargetGUID = 0; + + bShoot = false; + } + InstanceScript* instance; uint8 uiPhase; @@ -755,13 +791,7 @@ public: void Reset() override { - uiShootTimer = 12000; - uiMultiShotTimer = 0; - uiLightningArrowsTimer = 7000; - - uiTargetGUID = 0; - - bShoot = false; + Initialize(); } void JustReachedHome() override @@ -879,6 +909,7 @@ public: { boss_rouge_toc5AI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); bDone = false; @@ -892,6 +923,13 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); } + void Initialize() + { + uiEviscerateTimer = 8000; + uiFanKivesTimer = 14000; + uiPosionBottleTimer = 19000; + } + InstanceScript* instance; uint8 uiPhase; @@ -905,9 +943,7 @@ public: void Reset() override { - uiEviscerateTimer = 8000; - uiFanKivesTimer = 14000; - uiPosionBottleTimer = 19000; + Initialize(); } void JustReachedHome() override diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp index e0930a1ae2e..e073d08ef1d 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp @@ -115,8 +115,6 @@ public: uint64 uiVehicle2GUID; uint64 uiVehicle3GUID; - uint64 uiGrandChampionBoss1; - std::list<uint64> Champion1List; std::list<uint64> Champion2List; std::list<uint64> Champion3List; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp index 7af55ec37ea..2f29e03a2f2 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -166,6 +166,13 @@ class boss_anubarak_trial : public CreatureScript { boss_anubarak_trialAI(Creature* creature) : BossAI(creature, BOSS_ANUBARAK) { + Initialize(); + } + + void Initialize() + { + _intro = true; + _reachedPhase3 = false; } void Reset() override @@ -183,8 +190,7 @@ class boss_anubarak_trial : public CreatureScript if (!IsHeroic()) events.ScheduleEvent(EVENT_SUMMON_FROST_SPHERE, 20*IN_MILLISECONDS); - _intro = true; - _reachedPhase3 = false; + Initialize(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); // clean up spawned Frost Spheres std::list<Creature*> FrostSphereList; @@ -436,13 +442,19 @@ class npc_swarm_scarab : public CreatureScript { npc_swarm_scarabAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); _instance = creature->GetInstanceScript(); } + void Initialize() + { + _determinationTimer = urand(5 * IN_MILLISECONDS, 60 * IN_MILLISECONDS); + } + void Reset() override { me->SetCorpseDelay(0); - _determinationTimer = urand(5*IN_MILLISECONDS, 60*IN_MILLISECONDS); + Initialize(); DoCast(me, SPELL_ACID_MANDIBLE); me->SetInCombatWithZone(); if (me->IsInCombat()) @@ -508,13 +520,19 @@ class npc_nerubian_burrower : public CreatureScript { npc_nerubian_burrowerAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); _instance = creature->GetInstanceScript(); } + void Initialize() + { + _submergeTimer = 30 * IN_MILLISECONDS; + } + void Reset() override { me->SetCorpseDelay(10); - _submergeTimer = 30*IN_MILLISECONDS; + Initialize(); DoCast(me, SPELL_EXPOSE_WEAKNESS); DoCast(me, SPELL_SPIDER_FRENZY); DoCast(me, SPELL_AWAKENED); @@ -669,12 +687,18 @@ class npc_anubarak_spike : public CreatureScript { npc_anubarak_spikeAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); } - void Reset() override + void Initialize() { _phase = PHASE_NO_MOVEMENT; _phaseSwitchTimer = 1; + } + + void Reset() override + { + Initialize(); // make sure the spike has everyone on threat list me->SetInCombatWithZone(); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp index 0a43c01081f..3d59f24b6dd 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp @@ -348,10 +348,11 @@ class boss_toc_champion_controller : public CreatureScript { boss_toc_champion_controllerAI(Creature* creature) : ScriptedAI(creature), _summons(me) { + Initialize(); _instance = creature->GetInstanceScript(); } - void Reset() override + void Initialize() { _championsNotStarted = 0; _championsFailed = 0; @@ -359,6 +360,11 @@ class boss_toc_champion_controller : public CreatureScript _inProgress = false; } + void Reset() override + { + Initialize(); + } + std::vector<uint32> SelectChampions(Team playerTeam) { std::vector<uint32> vHealersEntries; @@ -1908,7 +1914,17 @@ class npc_toc_enh_shaman : public CreatureScript struct npc_toc_enh_shamanAI : public boss_faction_championsAI { - npc_toc_enh_shamanAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { } + npc_toc_enh_shamanAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) + { + Initialize(); + } + + void Initialize() + { + _totemCount = 0; + _totemOldCenterX = me->GetPositionX(); + _totemOldCenterY = me->GetPositionY(); + } void Reset() override { @@ -1920,9 +1936,7 @@ class npc_toc_enh_shaman : public CreatureScript events.ScheduleEvent(EVENT_DEPLOY_TOTEM, 1*IN_MILLISECONDS); events.ScheduleEvent(EVENT_WINDFURY, urand(20*IN_MILLISECONDS, 50*IN_MILLISECONDS)); - _totemCount = 0; - _totemOldCenterX = me->GetPositionX(); - _totemOldCenterY = me->GetPositionY(); + Initialize(); SetEquipmentSlots(false, 51803, 48013, EQUIP_NO_CHANGE); summons.DespawnAll(); } @@ -2192,12 +2206,20 @@ class npc_toc_pet_hunter : public CreatureScript struct npc_toc_pet_hunterAI : public boss_faction_championsAI { - npc_toc_pet_hunterAI(Creature* creature) : boss_faction_championsAI(creature, AI_PET) { } + npc_toc_pet_hunterAI(Creature* creature) : boss_faction_championsAI(creature, AI_PET) + { + Initialize(); + } + + void Initialize() + { + _clawTimer = urand(5 * IN_MILLISECONDS, 10 * IN_MILLISECONDS); + } void Reset() override { boss_faction_championsAI::Reset(); - _clawTimer = urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS); + Initialize(); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp index c0f7b2f1856..a8a370076a8 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp @@ -315,12 +315,18 @@ class npc_fel_infernal : public CreatureScript { npc_fel_infernalAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); _instance = creature->GetInstanceScript(); } + void Initialize() + { + _felStreakTimer = 30 * IN_MILLISECONDS; + } + void Reset() override { - _felStreakTimer = 30*IN_MILLISECONDS; + Initialize(); me->SetInCombatWithZone(); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index 9e75bef9735..f4112b7a43b 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp @@ -492,6 +492,18 @@ struct boss_jormungarAI : public BossAI { boss_jormungarAI(Creature* creature) : BossAI(creature, BOSS_BEASTS) { + OtherWormEntry = 0; + ModelStationary = 0; + ModelMobile = 0; + + BiteSpell = 0; + SpewSpell = 0; + SpitSpell = 0; + SpraySpell = 0; + + Phase = PHASE_MOBILE; + Enraged = false; + WasMobile = false; } void Reset() override @@ -780,12 +792,18 @@ class npc_slime_pool : public CreatureScript { npc_slime_poolAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); _instance = creature->GetInstanceScript(); } - void Reset() override + void Initialize() { _cast = false; + } + + void Reset() override + { + Initialize(); me->SetReactState(REACT_PASSIVE); } @@ -851,14 +869,11 @@ class boss_icehowl : public CreatureScript { boss_icehowlAI(Creature* creature) : BossAI(creature, BOSS_BEASTS) { + Initialize(); } - void Reset() override + void Initialize() { - events.ScheduleEvent(EVENT_FEROCIOUS_BUTT, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS)); - events.ScheduleEvent(EVENT_ARCTIC_BREATH, urand(15*IN_MILLISECONDS, 25*IN_MILLISECONDS)); - events.ScheduleEvent(EVENT_WHIRL, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS)); - events.ScheduleEvent(EVENT_MASSIVE_CRASH, 30*IN_MILLISECONDS); _movementStarted = false; _movementFinish = false; _trampleCast = false; @@ -869,6 +884,15 @@ class boss_icehowl : public CreatureScript _stage = 0; } + void Reset() override + { + events.ScheduleEvent(EVENT_FEROCIOUS_BUTT, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS)); + events.ScheduleEvent(EVENT_ARCTIC_BREATH, urand(15*IN_MILLISECONDS, 25*IN_MILLISECONDS)); + events.ScheduleEvent(EVENT_WHIRL, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS)); + events.ScheduleEvent(EVENT_MASSIVE_CRASH, 30*IN_MILLISECONDS); + Initialize(); + } + void JustDied(Unit* /*killer*/) override { _JustDied(); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index 68de65f9f7b..1118c1ec27b 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -143,6 +143,33 @@ struct boss_twin_baseAI : public BossAI { boss_twin_baseAI(Creature* creature) : BossAI(creature, BOSS_VALKIRIES) { + Initialize(); + AuraState = AURA_STATE_NONE; + + Stage = 0; + + Weapon = 0; + + VortexEmote = 0; + SisterNpcId = 0; + MyEmphatySpellId = 0; + OtherEssenceSpellId = 0; + SurgeSpellId = 0; + VortexSpellId = 0; + ShieldSpellId = 0; + TwinPactSpellId = 0; + SpikeSpellId = 0; + TouchSpellId = 0; + } + + void Initialize() + { + IsBerserk = false; + + SpecialAbilityTimer = 1 * MINUTE*IN_MILLISECONDS; + SpikeTimer = 20 * IN_MILLISECONDS; + TouchTimer = urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS); + BerserkTimer = IsHeroic() ? 6 * MINUTE*IN_MILLISECONDS : 10 * MINUTE*IN_MILLISECONDS; } void Reset() override @@ -153,12 +180,7 @@ struct boss_twin_baseAI : public BossAI /* Uncomment this once that they are floating above the ground me->SetLevitate(true); me->SetFlying(true); */ - IsBerserk = false; - - SpecialAbilityTimer = 1*MINUTE*IN_MILLISECONDS; - SpikeTimer = 20*IN_MILLISECONDS; - TouchTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS); - BerserkTimer = IsHeroic() ? 6*MINUTE*IN_MILLISECONDS : 10*MINUTE*IN_MILLISECONDS; + Initialize(); summons.DespawnAll(); } @@ -524,6 +546,12 @@ struct npc_unleashed_ballAI : public ScriptedAI { npc_unleashed_ballAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + } + + void Initialize() + { + RangeCheckTimer = 0.5*IN_MILLISECONDS; } void MoveToNextPoint() @@ -548,7 +576,7 @@ struct npc_unleashed_ballAI : public ScriptedAI me->SetCanFly(true); SetCombatMovement(false); MoveToNextPoint(); - RangeCheckTimer = 0.5*IN_MILLISECONDS; + Initialize(); } void MovementInform(uint32 uiType, uint32 uiId) override diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp index 11548ba4b1c..7829d1be627 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp @@ -240,7 +240,6 @@ class boss_lich_king_toc : public CreatureScript void Reset() override { - _updateTimer = 0; me->SetReactState(REACT_PASSIVE); if (Creature* summoned = me->SummonCreature(NPC_TRIGGER, ToCCommonLoc[2].GetPositionX(), ToCCommonLoc[2].GetPositionY(), ToCCommonLoc[2].GetPositionZ(), 5, TEMPSUMMON_TIMED_DESPAWN, 1*MINUTE*IN_MILLISECONDS)) { @@ -278,7 +277,7 @@ class boss_lich_king_toc : public CreatureScript if (_instance->GetData(TYPE_EVENT_NPC) != NPC_LICH_KING) return; - _updateTimer = _instance->GetData(TYPE_EVENT_TIMER); + uint32 _updateTimer = _instance->GetData(TYPE_EVENT_TIMER); if (_updateTimer <= uiDiff) { switch (_instance->GetData(TYPE_EVENT)) @@ -352,7 +351,6 @@ class boss_lich_king_toc : public CreatureScript private: InstanceScript* _instance; - uint32 _updateTimer; }; CreatureAI* GetAI(Creature* creature) const override @@ -370,7 +368,14 @@ class npc_fizzlebang_toc : public CreatureScript { npc_fizzlebang_tocAI(Creature* creature) : ScriptedAI(creature), _summons(me) { + Initialize(); _instance = me->GetInstanceScript(); + _triggerGUID = 0; + } + + void Initialize() + { + _portalGUID = 0; } void JustDied(Unit* killer) override @@ -388,7 +393,7 @@ class npc_fizzlebang_toc : public CreatureScript void Reset() override { me->SetWalk(true); - _portalGUID = 0; + Initialize(); me->GetMotionMaster()->MovePoint(1, ToCCommonLoc[10].GetPositionX(), ToCCommonLoc[10].GetPositionY()-60, ToCCommonLoc[10].GetPositionZ()); } @@ -423,7 +428,7 @@ class npc_fizzlebang_toc : public CreatureScript if (_instance->GetData(TYPE_EVENT_NPC) != NPC_FIZZLEBANG) return; - _updateTimer = _instance->GetData(TYPE_EVENT_TIMER); + uint32 _updateTimer = _instance->GetData(TYPE_EVENT_TIMER); if (_updateTimer <= uiDiff) { switch (_instance->GetData(TYPE_EVENT)) @@ -521,7 +526,6 @@ class npc_fizzlebang_toc : public CreatureScript private: InstanceScript* _instance; SummonList _summons; - uint32 _updateTimer; uint64 _portalGUID; uint64 _triggerGUID; }; @@ -556,7 +560,7 @@ class npc_tirion_toc : public CreatureScript if (_instance->GetData(TYPE_EVENT_NPC) != NPC_TIRION) return; - _updateTimer = _instance->GetData(TYPE_EVENT_TIMER); + uint32 _updateTimer = _instance->GetData(TYPE_EVENT_TIMER); if (_updateTimer <= uiDiff) { switch (_instance->GetData(TYPE_EVENT)) @@ -811,7 +815,6 @@ class npc_tirion_toc : public CreatureScript } private: InstanceScript* _instance; - uint32 _updateTimer; }; CreatureAI* GetAI(Creature* creature) const override @@ -844,7 +847,7 @@ class npc_garrosh_toc : public CreatureScript if (_instance->GetData(TYPE_EVENT_NPC) != NPC_GARROSH) return; - _updateTimer = _instance->GetData(TYPE_EVENT_TIMER); + uint32 _updateTimer = _instance->GetData(TYPE_EVENT_TIMER); if (_updateTimer <= uiDiff) { switch (_instance->GetData(TYPE_EVENT)) @@ -895,7 +898,6 @@ class npc_garrosh_toc : public CreatureScript } private: InstanceScript* _instance; - uint32 _updateTimer; }; CreatureAI* GetAI(Creature* creature) const override @@ -928,7 +930,7 @@ class npc_varian_toc : public CreatureScript if (_instance->GetData(TYPE_EVENT_NPC) != NPC_VARIAN) return; - _updateTimer = _instance->GetData(TYPE_EVENT_TIMER); + uint32 _updateTimer = _instance->GetData(TYPE_EVENT_TIMER); if (_updateTimer <= uiDiff) { switch (_instance->GetData(TYPE_EVENT)) @@ -979,7 +981,6 @@ class npc_varian_toc : public CreatureScript } private: InstanceScript* _instance; - uint32 _updateTimer; }; CreatureAI* GetAI(Creature* creature) const override diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp index a1690598532..694e502e508 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp @@ -58,10 +58,19 @@ class boss_king_dred : public CreatureScript struct boss_king_dredAI : public BossAI { - boss_king_dredAI(Creature* creature) : BossAI(creature, DATA_KING_DRED) { } + boss_king_dredAI(Creature* creature) : BossAI(creature, DATA_KING_DRED) + { + Initialize(); + } + + void Initialize() + { + raptorsKilled = 0; + } void Reset() override { + Initialize(); _Reset(); } @@ -166,16 +175,22 @@ class npc_drakkari_gutripper : public CreatureScript { npc_drakkari_gutripperAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = me->GetInstanceScript(); } + void Initialize() + { + GutRipTimer = urand(10000, 15000); + } + InstanceScript* instance; uint32 GutRipTimer; void Reset() override { - GutRipTimer = urand(10000, 15000); + Initialize(); } void UpdateAI(uint32 diff) override @@ -216,16 +231,22 @@ class npc_drakkari_scytheclaw : public CreatureScript { npc_drakkari_scytheclawAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = me->GetInstanceScript(); } + void Initialize() + { + uiRendTimer = urand(10000, 15000); + } + InstanceScript* instance; uint32 uiRendTimer; void Reset() override { - uiRendTimer = urand(10000, 15000); + Initialize(); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp index 4e9462a447f..6b26143745b 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp @@ -80,14 +80,23 @@ public: struct boss_novosAI : public BossAI { - boss_novosAI(Creature* creature) : BossAI(creature, DATA_NOVOS) { } + boss_novosAI(Creature* creature) : BossAI(creature, DATA_NOVOS) + { + Initialize(); + _bubbled = false; + } + + void Initialize() + { + _ohNovos = true; + _crystalHandlerCount = 0; + } void Reset() override { _Reset(); - _ohNovos = true; - _crystalHandlerCount = 0; + Initialize(); SetCrystalsStatus(false); SetSummonerStatus(false); SetBubbled(false); @@ -280,15 +289,23 @@ public: struct npc_crystal_channel_targetAI : public ScriptedAI { - npc_crystal_channel_targetAI(Creature* creature) : ScriptedAI(creature) { } + npc_crystal_channel_targetAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { _spell = 0; _timer = 0; _temp = 0; } + void Reset() override + { + Initialize(); + } + void UpdateAI(uint32 diff) override { if (_spell) diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp index 13d968d9e06..a8f083c97ee 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp @@ -73,12 +73,20 @@ class boss_trollgore : public CreatureScript struct boss_trollgoreAI : public BossAI { - boss_trollgoreAI(Creature* creature) : BossAI(creature, DATA_TROLLGORE) { } + boss_trollgoreAI(Creature* creature) : BossAI(creature, DATA_TROLLGORE) + { + Initialize(); + } + + void Initialize() + { + _consumptionJunction = true; + } void Reset() override { _Reset(); - _consumptionJunction = true; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp index fe98f005bca..670591a058c 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp @@ -71,14 +71,6 @@ class boss_bronjahm : public CreatureScript DoCast(me, SPELL_SOULSTORM_CHANNEL, true); } - void InitializeAI() override - { - if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != sObjectMgr->GetScriptId(FoSScriptName)) - me->IsAIEnabled = false; - else if (!me->isDead()) - Reset(); - } - void Reset() override { events.Reset(); @@ -188,7 +180,7 @@ class boss_bronjahm : public CreatureScript CreatureAI* GetAI(Creature* creature) const override { - return GetInstanceAI<boss_bronjahmAI>(creature); + return GetInstanceAI<boss_bronjahmAI>(creature, FoSScriptName); } }; diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp index a048abd6554..4b4fd398e72 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp @@ -130,14 +130,15 @@ class boss_devourer_of_souls : public CreatureScript { boss_devourer_of_soulsAI(Creature* creature) : BossAI(creature, DATA_DEVOURER_EVENT) { + Initialize(); + beamAngle = 0.f; + beamAngleDiff = 0.f; + wailingSoulTick = 0; } - void InitializeAI() override + void Initialize() { - if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != sObjectMgr->GetScriptId(FoSScriptName)) - me->IsAIEnabled = false; - else if (!me->isDead()) - Reset(); + threeFaced = true; } void Reset() override @@ -149,7 +150,7 @@ class boss_devourer_of_souls : public CreatureScript events.Reset(); summons.DespawnAll(); - threeFaced = true; + Initialize(); instance->SetData(DATA_DEVOURER_EVENT, NOT_STARTED); } @@ -345,7 +346,7 @@ class boss_devourer_of_souls : public CreatureScript CreatureAI* GetAI(Creature* creature) const override { - return GetInstanceAI<boss_devourer_of_soulsAI>(creature); + return GetInstanceAI<boss_devourer_of_soulsAI>(creature, FoSScriptName); } }; diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp index fc9a786aab9..7a36dfe7fae 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp @@ -80,10 +80,16 @@ public: { npc_sylvanas_fosAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = me->GetInstanceScript(); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); } + void Initialize() + { + phase = PHASE_NORMAL; + } + InstanceScript* instance; EventMap events; @@ -92,7 +98,7 @@ public: void Reset() override { events.Reset(); - phase = PHASE_NORMAL; + Initialize(); } void DoAction(int32 actionId) override @@ -203,10 +209,16 @@ public: { npc_jaina_fosAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = me->GetInstanceScript(); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); } + void Initialize() + { + phase = PHASE_NORMAL; + } + InstanceScript* instance; EventMap events; @@ -215,7 +227,7 @@ public: void Reset() override { events.Reset(); - phase = PHASE_NORMAL; + Initialize(); } void DoAction(int32 actionId) override diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp index a5577b6a0ea..a014be4369e 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp @@ -55,12 +55,20 @@ class boss_falric : public CreatureScript struct boss_falricAI : public boss_horAI { - boss_falricAI(Creature* creature) : boss_horAI(creature, DATA_FALRIC) { } + boss_falricAI(Creature* creature) : boss_horAI(creature, DATA_FALRIC) + { + Initialize(); + } + + void Initialize() + { + _hopelessnessCount = 0; + } void Reset() override { boss_horAI::Reset(); - _hopelessnessCount = 0; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index 783f9e245c8..62a6ac41074 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -82,14 +82,22 @@ class boss_garfrost : public CreatureScript struct boss_garfrostAI : public BossAI { - boss_garfrostAI(Creature* creature) : BossAI(creature, DATA_GARFROST) { } + boss_garfrostAI(Creature* creature) : BossAI(creature, DATA_GARFROST) + { + Initialize(); + } + + void Initialize() + { + _permafrostStack = 0; + } void Reset() override { _Reset(); events.SetPhase(PHASE_ONE); SetEquipmentSlots(true); - _permafrostStack = 0; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index 3f8e1cc6ee0..5b147344a59 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -140,6 +140,7 @@ class boss_ick : public CreatureScript boss_ickAI(Creature* creature) : BossAI(creature, DATA_ICK), _vehicle(creature->GetVehicleKit()) { ASSERT(_vehicle); + _tempThreat = 0; } void Reset() override @@ -286,14 +287,20 @@ class boss_krick : public CreatureScript { boss_krickAI(Creature* creature) : ScriptedAI(creature), _instanceScript(creature->GetInstanceScript()), _summons(creature) { + Initialize(); } - void Reset() override + void Initialize() { - _events.Reset(); _phase = PHASE_COMBAT; _outroNpcGUID = 0; _tyrannusGUID = 0; + } + + void Reset() override + { + _events.Reset(); + Initialize(); me->SetReactState(REACT_PASSIVE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index c4f46136bd9..f392b21b173 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -293,14 +293,20 @@ class boss_rimefang : public CreatureScript boss_rimefangAI(Creature* creature) : ScriptedAI(creature), _vehicle(creature->GetVehicleKit()) { ASSERT(_vehicle); + Initialize(); + } + + void Initialize() + { + _currentWaypoint = 0; + _hoarfrostTargetGUID = 0; } void Reset() override { _events.Reset(); _events.SetPhase(PHASE_NONE); - _currentWaypoint = 0; - _hoarfrostTargetGUID = 0; + Initialize(); me->SetCanFly(true); me->SetReactState(REACT_PASSIVE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp index 9b9376c34f2..d829b98f926 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp @@ -52,6 +52,7 @@ class instance_pit_of_saron : public InstanceMapScript _jainaOrSylvanas1GUID = 0; _jainaOrSylvanas2GUID = 0; _teamInInstance = 0; + _tyrannusEventGUID = 0; } void OnPlayerEnter(Player* player) override diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp index 7bd9325dd97..4d2ebd44db8 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp @@ -113,13 +113,19 @@ class npc_iceborn_protodrake : public CreatureScript npc_iceborn_protodrakeAI(Creature* creature) : ScriptedAI(creature), _vehicle(creature->GetVehicleKit()) { ASSERT(_vehicle); + Initialize(); } - void Reset() override + void Initialize() { _frostBreathCooldown = 5000; } + void Reset() override + { + Initialize(); + } + void EnterCombat(Unit* /*who*/) override { _vehicle->RemoveAllPassengers(); @@ -161,13 +167,19 @@ class npc_geist_ambusher : public CreatureScript { npc_geist_ambusherAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); } - void Reset() override + void Initialize() { _leapingFaceMaulCooldown = 9000; } + void Reset() override + { + Initialize(); + } + void EnterCombat(Unit* who) override { if (who->GetTypeId() != TYPEID_PLAYER) diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index 68929d2aa01..001f19679c4 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -82,14 +82,14 @@ class boss_drakkari_colossus : public CreatureScript { boss_drakkari_colossusAI(Creature* creature) : BossAI(creature, DATA_DRAKKARI_COLOSSUS_EVENT) { + Initialize(); me->SetReactState(REACT_PASSIVE); introDone = false; } - void InitializeAI() override + void Initialize() { - if (!me->isDead()) - Reset(); + phase = COLOSSUS_PHASE_NORMAL; } void Reset() override @@ -106,7 +106,7 @@ class boss_drakkari_colossus : public CreatureScript //events.Reset(); -> done in _Reset(); events.ScheduleEvent(EVENT_MIGHTY_BLOW, urand(10000, 30000)); - phase = COLOSSUS_PHASE_NORMAL; + Initialize(); // Note: This should not be called, but before use SetBossState function we should use BossAI // in all the bosses of the instance @@ -393,13 +393,19 @@ public: { npc_living_mojoAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + mojoWaveTimer = 2 * IN_MILLISECONDS; + mojoPuddleTimer = 7 * IN_MILLISECONDS; + } + void Reset() override { - mojoWaveTimer = 2*IN_MILLISECONDS; - mojoPuddleTimer = 7*IN_MILLISECONDS; + Initialize(); } void MoveMojos(Creature* boss) diff --git a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp index 8e0ff54e161..0783a79b381 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp @@ -44,9 +44,20 @@ public: { boss_eckAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiBerserkTimer = urand(60 * IN_MILLISECONDS, 90 * IN_MILLISECONDS); //60-90 secs according to wowwiki + uiBiteTimer = 5 * IN_MILLISECONDS; + uiSpitTimer = 10 * IN_MILLISECONDS; + uiSpringTimer = 8 * IN_MILLISECONDS; + + bBerserk = false; + } + uint32 uiBerserkTimer; uint32 uiBiteTimer; uint32 uiSpitTimer; @@ -58,12 +69,7 @@ public: void Reset() override { - uiBerserkTimer = urand(60*IN_MILLISECONDS, 90*IN_MILLISECONDS); //60-90 secs according to wowwiki - uiBiteTimer = 5*IN_MILLISECONDS; - uiSpitTimer = 10*IN_MILLISECONDS; - uiSpringTimer = 8*IN_MILLISECONDS; - - bBerserk = false; + Initialize(); instance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, NOT_STARTED); } diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp index f1c246dbbea..22e7ac280fd 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp @@ -77,9 +77,26 @@ public: { boss_gal_darahAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiStampedeTimer = 10 * IN_MILLISECONDS; + uiWhirlingSlashTimer = 21 * IN_MILLISECONDS; + uiPunctureTimer = 10 * IN_MILLISECONDS; + uiEnrageTimer = 15 * IN_MILLISECONDS; + uiImpalingChargeTimer = 21 * IN_MILLISECONDS; + uiStompTimer = 25 * IN_MILLISECONDS; + uiTransformationTimer = 9 * IN_MILLISECONDS; + uiPhaseCounter = 0; + + shareTheLove = 0; + bStartOfTransformation = true; + Phase = TROLL; + } + uint32 uiStampedeTimer; uint32 uiWhirlingSlashTimer; uint32 uiPunctureTimer; @@ -100,21 +117,9 @@ public: void Reset() override { - uiStampedeTimer = 10*IN_MILLISECONDS; - uiWhirlingSlashTimer = 21*IN_MILLISECONDS; - uiPunctureTimer = 10*IN_MILLISECONDS; - uiEnrageTimer = 15*IN_MILLISECONDS; - uiImpalingChargeTimer = 21*IN_MILLISECONDS; - uiStompTimer = 25*IN_MILLISECONDS; - uiTransformationTimer = 9*IN_MILLISECONDS; - uiPhaseCounter = 0; + Initialize(); impaledList.clear(); - shareTheLove = 0; - - bStartOfTransformation = true; - - Phase = TROLL; me->SetDisplayId(DISPLAY_TROLL); diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp index 7645d984aac..255a5ece261 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp @@ -61,9 +61,19 @@ public: { boss_moorabiAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiGroundTremorTimer = 18 * IN_MILLISECONDS; + uiNumblingShoutTimer = 10 * IN_MILLISECONDS; + uiDeterminedStabTimer = 20 * IN_MILLISECONDS; + uiTransformationTImer = 12 * IN_MILLISECONDS; + bPhase = false; + } + InstanceScript* instance; bool bPhase; @@ -75,11 +85,7 @@ public: void Reset() override { - uiGroundTremorTimer = 18*IN_MILLISECONDS; - uiNumblingShoutTimer = 10*IN_MILLISECONDS; - uiDeterminedStabTimer = 20*IN_MILLISECONDS; - uiTransformationTImer = 12*IN_MILLISECONDS; - bPhase = false; + Initialize(); instance->SetData(DATA_MOORABI_EVENT, NOT_STARTED); } diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp index 98c8481b5ae..5db49415604 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp @@ -83,9 +83,19 @@ public: { boss_slad_ranAI(Creature* creature) : ScriptedAI(creature), lSummons(me) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiPoisonNovaTimer = 10 * IN_MILLISECONDS; + uiPowerfullBiteTimer = 3 * IN_MILLISECONDS; + uiVenomBoltTimer = 15 * IN_MILLISECONDS; + uiSpawnTimer = 5 * IN_MILLISECONDS; + uiPhase = 0; + } + uint32 uiPoisonNovaTimer; uint32 uiPowerfullBiteTimer; uint32 uiVenomBoltTimer; @@ -100,11 +110,7 @@ public: void Reset() override { - uiPoisonNovaTimer = 10*IN_MILLISECONDS; - uiPowerfullBiteTimer = 3*IN_MILLISECONDS; - uiVenomBoltTimer = 15*IN_MILLISECONDS; - uiSpawnTimer = 5*IN_MILLISECONDS; - uiPhase = 0; + Initialize(); lWrappedPlayers.clear(); lSummons.DespawnAll(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index a9088207ebe..3aebed81f0b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -182,14 +182,20 @@ class boss_blood_council_controller : public CreatureScript { boss_blood_council_controllerAI(Creature* creature) : BossAI(creature, DATA_BLOOD_PRINCE_COUNCIL) { + Initialize(); + } + + void Initialize() + { + _invocationStage = 0; + _resetCounter = 0; } void Reset() override { events.Reset(); me->SetReactState(REACT_PASSIVE); - _invocationStage = 0; - _resetCounter = 0; + Initialize(); instance->SetBossState(DATA_BLOOD_PRINCE_COUNCIL, NOT_STARTED); } @@ -1142,6 +1148,7 @@ class npc_ball_of_flame : public CreatureScript npc_ball_of_flameAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { _despawnTimer = 0; + _chaseGUID = 0; } void Reset() override @@ -1224,7 +1231,12 @@ class npc_kinetic_bomb : public CreatureScript struct npc_kinetic_bombAI : public ScriptedAI { - npc_kinetic_bombAI(Creature* creature) : ScriptedAI(creature) { } + npc_kinetic_bombAI(Creature* creature) : ScriptedAI(creature) + { + _x = 0.f; + _y = 0.f; + _groundZ = 0.f; + } void Reset() override { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 104a8357917..29d50f1db2a 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -143,6 +143,14 @@ class boss_blood_queen_lana_thel : public CreatureScript { boss_blood_queen_lana_thelAI(Creature* creature) : BossAI(creature, DATA_BLOOD_QUEEN_LANA_THEL) { + Initialize(); + } + + void Initialize() + { + _offtankGUID = 0; + _creditBloodQuickening = false; + _killMinchar = false; } void Reset() override @@ -157,10 +165,8 @@ class boss_blood_queen_lana_thel : public CreatureScript events.ScheduleEvent(EVENT_TWILIGHT_BLOODBOLT, urand(20000, 25000), EVENT_GROUP_NORMAL); events.ScheduleEvent(EVENT_AIR_PHASE, 124000 + uint32(Is25ManRaid() ? 3000 : 0)); CleanAuras(); - _offtankGUID = 0; _vampires.clear(); - _creditBloodQuickening = false; - _killMinchar = false; + Initialize(); } void EnterCombat(Unit* who) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 5ef84c7bb40..4b9308fc12d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -249,18 +249,24 @@ class boss_deathbringer_saurfang : public CreatureScript { boss_deathbringer_saurfangAI(Creature* creature) : BossAI(creature, DATA_DEATHBRINGER_SAURFANG) { + Initialize(); ASSERT(creature->GetVehicleKit()); // we dont actually use it, just check if exists _introDone = false; _fallenChampionCastCount = 0; } + void Initialize() + { + _frenzied = false; + _dead = false; + } + void Reset() override { _Reset(); me->SetReactState(REACT_DEFENSIVE); events.SetPhase(PHASE_COMBAT); - _frenzied = false; - _dead = false; + Initialize(); me->SetPower(POWER_ENERGY, 0); DoCast(me, SPELL_ZERO_POWER, true); DoCast(me, SPELL_BLOOD_LINK, true); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index d59e723d070..bbdca1fa8c5 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -218,6 +218,14 @@ class boss_lady_deathwhisper : public CreatureScript boss_lady_deathwhisperAI(Creature* creature) : BossAI(creature, DATA_LADY_DEATHWHISPER), _dominateMindCount(RAID_MODE<uint8>(0, 1, 1, 3)), _introDone(false) { + Initialize(); + } + + void Initialize() + { + _waveCounter = 0; + _nextVengefulShadeTargetGUID = 0; + _darnavanGUID = 0; } void Reset() override @@ -225,9 +233,7 @@ class boss_lady_deathwhisper : public CreatureScript _Reset(); me->SetPower(POWER_MANA, me->GetMaxPower(POWER_MANA)); events.SetPhase(PHASE_ONE); - _waveCounter = 0; - _nextVengefulShadeTargetGUID = 0; - _darnavanGUID = 0; + Initialize(); DoCast(me, SPELL_SHADOW_CHANNELING); me->RemoveAurasDueToSpell(SPELL_BERSERK); me->RemoveAurasDueToSpell(SPELL_MANA_BARRIER); @@ -837,6 +843,13 @@ class npc_darnavan : public CreatureScript { npc_darnavanAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + } + + void Initialize() + { + _canCharge = true; + _canShatter = true; } void Reset() override @@ -846,8 +859,7 @@ class npc_darnavan : public CreatureScript _events.ScheduleEvent(EVENT_DARNAVAN_INTIMIDATING_SHOUT, urand(20000, 25000)); _events.ScheduleEvent(EVENT_DARNAVAN_MORTAL_STRIKE, urand(25000, 30000)); _events.ScheduleEvent(EVENT_DARNAVAN_SUNDER_ARMOR, urand(5000, 8000)); - _canCharge = true; - _canShatter = true; + Initialize(); } void JustDied(Unit* killer) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 9d24ad062df..b7bf27177ea 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -133,6 +133,7 @@ class boss_lord_marrowgar : public CreatureScript _coldflameLastPos.Relocate(creature); _introDone = false; _boneSlice = false; + _coldflameTarget = 0; } void Reset() override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 11f20129b3e..c1a13c90780 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -223,6 +223,7 @@ class boss_professor_putricide : public CreatureScript _baseSpeed(creature->GetSpeedRate(MOVE_RUN)), _experimentState(EXPERIMENT_STATE_OOZE) { _phase = PHASE_NONE; + _oozeFloodStage = 0; } void Reset() override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 76c5a93f9c5..3b65c10aaa9 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -221,6 +221,14 @@ class boss_sindragosa : public CreatureScript { boss_sindragosaAI(Creature* creature) : BossAI(creature, DATA_SINDRAGOSA), _summoned(false) { + Initialize(); + } + + void Initialize() + { + _mysticBuffetStack = 0; + _isInAirPhase = false; + _isThirdPhase = false; } void Reset() override @@ -235,9 +243,7 @@ class boss_sindragosa : public CreatureScript events.ScheduleEvent(EVENT_UNCHAINED_MAGIC, urand(9000, 14000), EVENT_GROUP_LAND_PHASE); events.ScheduleEvent(EVENT_ICY_GRIP, 33500, EVENT_GROUP_LAND_PHASE); events.ScheduleEvent(EVENT_AIR_PHASE, 50000); - _mysticBuffetStack = 0; - _isInAirPhase = false; - _isThirdPhase = false; + Initialize(); if (!_summoned) { @@ -558,6 +564,7 @@ class npc_ice_tomb : public CreatureScript npc_ice_tombAI(Creature* creature) : ScriptedAI(creature) { _trappedPlayerGUID = 0; + _existenceCheckTimer = 0; SetCombatMovement(false); } @@ -765,6 +772,12 @@ class npc_rimefang : public CreatureScript { npc_rimefangAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()), _summoned(false) { + Initialize(); + } + + void Initialize() + { + _icyBlastCounter = 0; } void InitializeAI() override @@ -783,7 +796,7 @@ class npc_rimefang : public CreatureScript _events.ScheduleEvent(EVENT_FROST_BREATH_RIMEFANG, urand(12000, 15000)); _events.ScheduleEvent(EVENT_ICY_BLAST, urand(30000, 35000)); me->SetReactState(REACT_DEFENSIVE); - _icyBlastCounter = 0; + Initialize(); if (!_summoned) { @@ -922,7 +935,14 @@ class npc_sindragosa_trash : public CreatureScript { npc_sindragosa_trashAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); _instance = creature->GetInstanceScript(); + _frostwyrmId = 0; + } + + void Initialize() + { + _isTaunted = false; } void InitializeAI() override @@ -946,7 +966,7 @@ class npc_sindragosa_trash : public CreatureScript _events.ScheduleEvent(EVENT_CONCUSSIVE_SHOCK, urand(8000, 10000)); } - _isTaunted = false; + Initialize(); } void JustRespawned() override 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 b72b953efb4..e2fe441dae2 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -504,6 +504,13 @@ class boss_the_lich_king : public CreatureScript { boss_the_lich_kingAI(Creature* creature) : BossAI(creature, DATA_THE_LICH_KING) { + Initialize(); + } + + void Initialize() + { + _necroticPlagueStack = 0; + _vileSpiritExplosions = 0; } void Reset() override @@ -511,8 +518,7 @@ class boss_the_lich_king : public CreatureScript _Reset(); me->SetReactState(REACT_PASSIVE); events.SetPhase(PHASE_INTRO); - _necroticPlagueStack = 0; - _vileSpiritExplosions = 0; + Initialize(); SetEquipmentSlots(true); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 0c504842c08..2d58a6eeb26 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -282,6 +282,17 @@ class boss_valithria_dreamwalker : public CreatureScript boss_valithria_dreamwalkerAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()), _portalCount(RAID_MODE<uint32>(3, 8, 3, 8)) { + Initialize(); + _spawnHealth = me->GetHealth(); + } + + void Initialize() + { + _missedPortals = 0; + _under25PercentTalkDone = false; + _over75PercentTalkDone = false; + _justDied = false; + _done = false; } void InitializeAI() override @@ -305,11 +316,7 @@ class boss_valithria_dreamwalker : public CreatureScript // Glyph of Dispel Magic - not a percent heal by effect, its cast with custom basepoints me->ApplySpellImmune(0, IMMUNITY_ID, 56131, true); _instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); - _missedPortals = 0; - _under25PercentTalkDone = false; - _over75PercentTalkDone = false; - _justDied = false; - _done = false; + Initialize(); } void AttackStart(Unit* /*target*/) override @@ -680,6 +687,12 @@ class npc_risen_archmage : public CreatureScript npc_risen_archmageAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { + Initialize(); + } + + void Initialize() + { + _canCallEnterCombat = true; } bool CanAIAttack(Unit const* target) const override @@ -693,7 +706,7 @@ class npc_risen_archmage : public CreatureScript _events.ScheduleEvent(EVENT_FROSTBOLT_VOLLEY, urand(5000, 15000)); _events.ScheduleEvent(EVENT_MANA_VOID, urand(20000, 25000)); _events.ScheduleEvent(EVENT_COLUMN_OF_FROST, urand(10000, 20000)); - _canCallEnterCombat = true; + Initialize(); } void EnterCombat(Unit* /*target*/) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index e85ddc21dda..e403e37835c 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -385,17 +385,23 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript { npc_highlord_tirion_fordringAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { + Initialize(); } - void Reset() override + void Initialize() { - _events.Reset(); _theLichKing = 0; _bolvarFordragon = 0; _factionNPC = 0; _damnedKills = 0; } + void Reset() override + { + _events.Reset(); + Initialize(); + } + // IMPORTANT NOTE: This is triggered from per-GUID scripts // of The Damned SAI void SetData(uint32 type, uint32 data) override @@ -939,11 +945,18 @@ class npc_crok_scourgebane : public CreatureScript _instance(creature->GetInstanceScript()), _respawnTime(creature->GetRespawnDelay()), _corpseDelay(creature->GetCorpseDelay()) { + Initialize(); SetDespawnAtEnd(false); SetDespawnAtFar(false); _isEventActive = false; _isEventDone = _instance->GetBossState(DATA_SISTER_SVALNA) == DONE; + _currentWPid = 0; + } + + void Initialize() + { _didUnderTenPercentText = false; + _wipeCheckTimer = 1000; } void Reset() override @@ -952,8 +965,7 @@ class npc_crok_scourgebane : public CreatureScript _events.ScheduleEvent(EVENT_SCOURGE_STRIKE, urand(7500, 12500)); _events.ScheduleEvent(EVENT_DEATH_STRIKE, urand(25000, 30000)); me->SetReactState(REACT_DEFENSIVE); - _didUnderTenPercentText = false; - _wipeCheckTimer = 1000; + Initialize(); } void DoAction(int32 action) override @@ -1647,12 +1659,18 @@ class npc_impaling_spear : public CreatureScript { npc_impaling_spearAI(Creature* creature) : CreatureAI(creature) { + Initialize(); + } + + void Initialize() + { + _vehicleCheckTimer = 500; } void Reset() override { me->SetReactState(REACT_PASSIVE); - _vehicleCheckTimer = 500; + Initialize(); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 64e1d788695..f5f59e5d1fe 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -174,6 +174,9 @@ class instance_icecrown_citadel : public InstanceMapScript UpperSpireTeleporterActiveState = NOT_STARTED; BloodQuickeningState = NOT_STARTED; BloodQuickeningMinutes = 0; + FrozenBolvarGUID = 0; + PillarsChainedGUID = 0; + PillarsUnchainedGUID = 0; } // A function to help reduce the number of lines for teleporter management. diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index 676e4134f11..35402771494 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -62,7 +62,15 @@ public: struct boss_anubrekhanAI : public BossAI { - boss_anubrekhanAI(Creature* creature) : BossAI(creature, BOSS_ANUBREKHAN) { } + boss_anubrekhanAI(Creature* creature) : BossAI(creature, BOSS_ANUBREKHAN) + { + Initialize(); + } + + void Initialize() + { + hasTaunted = false; + } bool hasTaunted; @@ -70,7 +78,7 @@ public: { _Reset(); - hasTaunted = false; + Initialize(); if (GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL) { diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp index e2ff68ab851..a8de1418cc4 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp @@ -96,12 +96,25 @@ public: { boss_four_horsemenAI(Creature* creature) : BossAI(creature, BOSS_HORSEMEN) { + Initialize(); id = Horsemen(0); for (uint8 i = 0; i < 4; ++i) if (me->GetEntry() == NPC_HORSEMEN[i]) id = Horsemen(i); caster = (id == HORSEMEN_LADY || id == HORSEMEN_SIR); + } + + void Initialize() + { + uiEventStarterGUID = 0; + nextWP = 0; + punishTimer = 2000; + nextMovementStarted = false; + movementCompleted = false; + movementStarted = false; + encounterActionAttack = false; encounterActionReset = false; + doDelayPunish = false; } Horsemen id; @@ -124,15 +137,7 @@ public: instance->SetData(DATA_HORSEMEN0 + id, NOT_STARTED); me->SetReactState(REACT_AGGRESSIVE); - uiEventStarterGUID = 0; - nextWP = 0; - punishTimer = 2000; - nextMovementStarted = false; - movementCompleted = false; - movementStarted = false; - encounterActionAttack = false; - encounterActionReset = false; - doDelayPunish = false; + Initialize(); _Reset(); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 648fc3c87d2..de9d85db70b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -162,7 +162,18 @@ class boss_gothik : public CreatureScript struct boss_gothikAI : public BossAI { - boss_gothikAI(Creature* creature) : BossAI(creature, BOSS_GOTHIK) { } + boss_gothikAI(Creature* creature) : BossAI(creature, BOSS_GOTHIK) + { + Initialize(); + waveCount = 0; + } + + void Initialize() + { + mergedSides = false; + phaseTwo = false; + thirtyPercentReached = false; + } uint32 waveCount; typedef std::vector<Creature*> TriggerVct; @@ -182,9 +193,7 @@ class boss_gothik : public CreatureScript me->SetReactState(REACT_PASSIVE); instance->SetData(DATA_GOTHIK_GATE, GO_STATE_ACTIVE); _Reset(); - mergedSides = false; - phaseTwo = false; - thirtyPercentReached = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp index 648da29ca66..2d0e8a6d2b2 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp @@ -66,7 +66,13 @@ public: struct boss_heiganAI : public BossAI { - boss_heiganAI(Creature* creature) : BossAI(creature, BOSS_HEIGAN) { } + boss_heiganAI(Creature* creature) : BossAI(creature, BOSS_HEIGAN) + { + eruptSection = 0; + eruptDirection = false; + safetyDance = false; + phase = PHASE_FIGHT; + } uint32 eruptSection; bool eruptDirection; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 61ee650b37a..1c4320fd48b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -263,9 +263,20 @@ public: { boss_kelthuzadAI(Creature* creature) : BossAI(creature, BOSS_KELTHUZAD), spawns(creature) { + Initialize(); uiFaction = me->getFaction(); } + void Initialize() + { + nGuardiansOfIcecrownCount = 0; + uiGuardiansOfIcecrownTimer = 5000; // 5 seconds for summoning each Guardian of Icecrown in phase 3 + + Phase = 0; + nAbomination = 0; + nWeaver = 0; + } + uint32 Phase; uint32 uiGuardiansOfIcecrownTimer; uint32 uiFaction; @@ -315,12 +326,7 @@ public: portal->ResetDoorOrButton(); } - nGuardiansOfIcecrownCount = 0; - uiGuardiansOfIcecrownTimer = 5000; // 5 seconds for summoning each Guardian of Icecrown in phase 3 - - Phase = 0; - nAbomination = 0; - nWeaver = 0; + Initialize(); } void KilledUnit(Unit* /*victim*/) override diff --git a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp index 9987802a165..736941949d1 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp @@ -60,15 +60,21 @@ class boss_loatheb : public CreatureScript { boss_loathebAI(Creature* creature) : BossAI(creature, BOSS_LOATHEB) { + Initialize(); } - void Reset() override + void Initialize() { - _Reset(); _doomCounter = 0; _sporeLoserData = true; } + void Reset() override + { + _Reset(); + Initialize(); + } + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp index 519f59cb086..64b2923b345 100644 --- a/src/tools/vmap4_extractor/model.cpp +++ b/src/tools/vmap4_extractor/model.cpp @@ -143,7 +143,7 @@ Vec3D fixCoordSystem2(Vec3D v) } ModelInstance::ModelInstance(MPQFile& f, char const* ModelInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE *pDirfile) - : scale(0), flags(0) + : id(0), scale(0), flags(0) { float ff[3]; f.read(&id, 4); |