diff options
Diffstat (limited to 'src')
50 files changed, 1112 insertions, 431 deletions
diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index 3b3f6eb247a..4c5994f6b3a 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -1061,6 +1061,7 @@ BfWGGameObjectBuilding::BfWGGameObjectBuilding(BattlefieldWG* wg, WintergraspGam _type = type; _worldState = worldState; _state = BATTLEFIELD_WG_OBJECTSTATE_NONE; + _staticTowerInfo = nullptr; } void BfWGGameObjectBuilding::Rebuild() diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp index 3f74ed2eb88..a654a37e2f5 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp @@ -73,6 +73,7 @@ public: { Initialize(); instance = creature->GetInstanceScript(); + uiOutroStep = 0; } void Initialize() diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index ff104a28197..fd5e328b7f2 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -356,6 +356,7 @@ public: step = 0; gossipStep = 0; bossEvent = 0; + WavesCounter = 0; } void Initialize() 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 7e83c24e0dd..fa4627e443b 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -346,7 +346,6 @@ public: uint32 uiBladeStormTimer; uint32 uiInterceptTimer; uint32 uiMortalStrikeTimer; - uint32 uiAttackTimer; bool bDone; bool bHome; diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index bd1a345e55b..eb01dfab141 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -345,6 +345,7 @@ public: Initialize(); _despawned = false; // We determine if Malygos will be realocated to spawning position on reset triggered by boss despawn on evade _flySpeed = me->GetSpeed(MOVE_FLIGHT); // Get initial fly speed, otherwise on each wipe fly speed would add up if we get it + _phase = PHASE_NOT_STARTED; } void Initialize() diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 7824fe86c87..6af60b322a7 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -67,7 +67,17 @@ public: struct npc_sinkhole_kill_creditAI : public ScriptedAI { - npc_sinkhole_kill_creditAI(Creature* creature) : ScriptedAI(creature){ } + npc_sinkhole_kill_creditAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + phaseTimer = 500; + phase = 0; + casterGuid.Clear(); + } uint32 phaseTimer; uint8 phase; @@ -75,9 +85,7 @@ public: void Reset() override { - phaseTimer = 500; - phase = 0; - casterGuid.Clear(); + Initialize(); } void SpellHit(Unit* caster, const SpellInfo* spell) override @@ -447,7 +455,18 @@ public: struct npc_nesingwary_trapperAI : public ScriptedAI { - npc_nesingwary_trapperAI(Creature* creature) : ScriptedAI(creature) { creature->SetVisible(false); } + npc_nesingwary_trapperAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + me->SetVisible(false); + phaseTimer = 2500; + phase = 1; + go_caribouGUID.Clear(); + } ObjectGuid go_caribouGUID; uint8 phase; @@ -455,10 +474,7 @@ public: void Reset() override { - me->SetVisible(false); - phaseTimer = 2500; - phase = 1; - go_caribouGUID.Clear(); + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -576,7 +592,16 @@ public: struct npc_lurgglbrAI : public npc_escortAI { - npc_lurgglbrAI(Creature* creature) : npc_escortAI(creature){ } + npc_lurgglbrAI(Creature* creature) : npc_escortAI(creature) + { + Initialize(); + } + + void Initialize() + { + IntroTimer = 0; + IntroPhase = 0; + } uint32 IntroTimer; uint32 IntroPhase; @@ -584,10 +609,7 @@ public: void Reset() override { if (!HasEscortState(STATE_ESCORT_ESCORTING)) - { - IntroTimer = 0; - IntroPhase = 0; - } + Initialize(); } void WaypointReached(uint32 waypointId) override @@ -723,6 +745,12 @@ public: { npc_nexus_drake_hatchlingAI(Creature* creature) : FollowerAI(creature) { + Initialize(); + } + + void Initialize() + { + WithRedDragonBlood = false; } ObjectGuid HarpoonerGUID; @@ -730,7 +758,7 @@ public: void Reset() override { - WithRedDragonBlood = false; + Initialize(); } void EnterCombat(Unit* who) override @@ -862,7 +890,26 @@ public: struct npc_thassarianAI : public npc_escortAI { - npc_thassarianAI(Creature* creature) : npc_escortAI(creature) { } + npc_thassarianAI(Creature* creature) : npc_escortAI(creature) + { + Initialize(); + } + + void Initialize() + { + arthasGUID.Clear(); + talbotGUID.Clear(); + leryssaGUID.Clear(); + arlosGUID.Clear(); + + arthasInPosition = false; + arlosInPosition = false; + leryssaInPosition = false; + talbotInPosition = false; + + phase = 0; + phaseTimer = 0; + } ObjectGuid arthasGUID; ObjectGuid talbotGUID; @@ -882,18 +929,7 @@ public: me->RestoreFaction(); me->RemoveStandFlags(UNIT_STAND_STATE_SIT); - arthasGUID.Clear(); - talbotGUID.Clear(); - leryssaGUID.Clear(); - arlosGUID.Clear(); - - arthasInPosition = false; - arlosInPosition = false; - leryssaInPosition = false; - talbotInPosition = false; - - phase = 0; - phaseTimer = 0; + Initialize(); } void WaypointReached(uint32 waypointId) override @@ -1239,7 +1275,20 @@ public: struct npc_counselor_talbotAI : public ScriptedAI { - npc_counselor_talbotAI(Creature* creature) : ScriptedAI(creature) { } + npc_counselor_talbotAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + leryssaGUID.Clear(); + arlosGUID.Clear(); + bCheck = false; + shadowBoltTimer = urand(5000, 12000); + deflectionTimer = urand(20000, 25000); + soulBlastTimer = urand(12000, 18000); + } ObjectGuid leryssaGUID; ObjectGuid arlosGUID; @@ -1252,12 +1301,7 @@ public: void Reset() override { - leryssaGUID.Clear(); - arlosGUID.Clear(); - bCheck = false; - shadowBoltTimer = urand(5000, 12000); - deflectionTimer = urand(20000, 25000); - soulBlastTimer = urand(12000, 18000); + Initialize(); } void MovementInform(uint32 uiType, uint32 /*uiId*/) override { @@ -1487,14 +1531,22 @@ public: struct npc_beryl_sorcererAI : public FollowerAI { - npc_beryl_sorcererAI(Creature* creature) : FollowerAI(creature) { } + npc_beryl_sorcererAI(Creature* creature) : FollowerAI(creature) + { + Initialize(); + } + + void Initialize() + { + bEnslaved = false; + } bool bEnslaved; void Reset() override { me->SetReactState(REACT_AGGRESSIVE); - bEnslaved = false; + Initialize(); } void EnterCombat(Unit* who) override @@ -1571,7 +1623,15 @@ public: struct npc_imprisoned_beryl_sorcererAI : public ScriptedAI { - npc_imprisoned_beryl_sorcererAI(Creature* creature) : ScriptedAI(creature) { } + npc_imprisoned_beryl_sorcererAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + rebuff = 0; + } uint32 rebuff; @@ -1580,7 +1640,7 @@ public: if (me->GetReactState() != REACT_PASSIVE) me->SetReactState(REACT_PASSIVE); - rebuff = 0; + Initialize(); } void UpdateAI(uint32 diff) override @@ -1775,12 +1835,21 @@ public: struct npc_bonker_togglevoltAI : public npc_escortAI { - npc_bonker_togglevoltAI(Creature* creature) : npc_escortAI(creature) { } + npc_bonker_togglevoltAI(Creature* creature) : npc_escortAI(creature) + { + Initialize(); + } + + void Initialize() + { + Bonker_agro = 0; + } + uint32 Bonker_agro; void Reset() override { - Bonker_agro=0; + Initialize(); SetDespawnAtFar(false); } @@ -1873,15 +1942,23 @@ public: struct npc_trapped_mammoth_calfAI : public ScriptedAI { - npc_trapped_mammoth_calfAI(Creature* creature) : ScriptedAI(creature) { } + npc_trapped_mammoth_calfAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + uiTimer = 1500; + bStarted = false; + } uint32 uiTimer; bool bStarted; void Reset() override { - uiTimer = 1500; - bStarted = false; + Initialize(); GameObject* pTrap = NULL; for (uint8 i = 0; i < MammothTrapsNum; ++i) @@ -2003,13 +2080,21 @@ public: struct npc_valiance_keep_cannoneerAI : public ScriptedAI { - npc_valiance_keep_cannoneerAI(Creature* creature) : ScriptedAI(creature) { } + npc_valiance_keep_cannoneerAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + uiTimer = urand(13000, 18000); + } uint32 uiTimer; void Reset() override { - uiTimer = urand(13000, 18000); + Initialize(); } void UpdateAI(uint32 diff) override @@ -2061,13 +2146,21 @@ public: struct npc_warmage_coldarraAI : public ScriptedAI { - npc_warmage_coldarraAI(Creature* creature) : ScriptedAI(creature) { } + npc_warmage_coldarraAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + m_uiTimer = 0; + } uint32 m_uiTimer; //Timer until recast void Reset() override { - m_uiTimer = 0; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -2180,8 +2273,17 @@ public: { npc_hidden_cultistAI(Creature* creature) : ScriptedAI(creature) { - uiEmoteState = creature->GetUInt32Value(UNIT_NPC_EMOTESTATE); - uiNpcFlags = creature->GetUInt32Value(UNIT_NPC_FLAGS); + Initialize(); + uiEmoteState = creature->GetUInt32Value(UNIT_NPC_EMOTESTATE); + uiNpcFlags = creature->GetUInt32Value(UNIT_NPC_FLAGS); + } + + void Initialize() + { + uiEventTimer = 0; + uiEventPhase = 0; + + uiPlayerGUID.Clear(); } uint32 uiEmoteState; @@ -2200,10 +2302,7 @@ public: if (uiNpcFlags) me->SetUInt32Value(UNIT_NPC_FLAGS, uiNpcFlags); - uiEventTimer = 0; - uiEventPhase = 0; - - uiPlayerGUID.Clear(); + Initialize(); DoCast(SPELL_SHROUD_OF_THE_DEATH_CULTIST); diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index e60c2162339..198fd53438a 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -279,12 +279,20 @@ public: struct npc_outhouse_bunnyAI : public ScriptedAI { - npc_outhouse_bunnyAI(Creature* creature) : ScriptedAI(creature) { } + npc_outhouse_bunnyAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { _counter = 0; - _gender = 0; + _gender = 0; + } + + void Reset() override + { + Initialize(); } void SetData(uint32 Type, uint32 Data) override @@ -341,13 +349,21 @@ public: struct npc_tallhorn_stagAI : public ScriptedAI { - npc_tallhorn_stagAI(Creature* creature) : ScriptedAI(creature) { } + npc_tallhorn_stagAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { _phase = 1; } + void Reset() override + { + Initialize(); + } + void UpdateAI(uint32 /*diff*/) override { if (_phase == 1) @@ -459,13 +475,21 @@ public: struct npc_wounded_skirmisherAI : public ScriptedAI { - npc_wounded_skirmisherAI(Creature* creature) : ScriptedAI(creature) { } + npc_wounded_skirmisherAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { _despawnTimer = 5000; } + void Reset() override + { + Initialize(); + } + void MovementInform(uint32, uint32 id) override { if (id == 1) @@ -651,12 +675,20 @@ public: struct npc_lake_frogAI : public ScriptedAI { - npc_lake_frogAI(Creature* creature) : ScriptedAI(creature) { } + npc_lake_frogAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { _following = false; _runningScript = false; + } + + void Reset() override + { + Initialize(); if (me->GetEntry() == NPC_LAKE_FROG_QUEST) me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); } diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index 53dc2a62f90..adf2af50a8e 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -74,13 +74,22 @@ public: struct npc_Apothecary_HanesAI : public npc_escortAI { - npc_Apothecary_HanesAI(Creature* creature) : npc_escortAI(creature){ } + npc_Apothecary_HanesAI(Creature* creature) : npc_escortAI(creature) + { + Initialize(); + } + + void Initialize() + { + PotTimer = 10000; //10 sec cooldown on potion + } + uint32 PotTimer; void Reset() override { SetDespawnAtFar(false); - PotTimer = 10000; //10 sec cooldown on potion + Initialize(); } void JustDied(Unit* /*killer*/) override @@ -318,15 +327,23 @@ public: /// @todo make prisoners help (unclear if summoned or using npc's from surrounding cages (summon inside small cages?)) struct npc_daegarnAI : public ScriptedAI { - npc_daegarnAI(Creature* creature) : ScriptedAI(creature) { } + npc_daegarnAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + bEventInProgress = false; + uiPlayerGUID.Clear(); + } bool bEventInProgress; ObjectGuid uiPlayerGUID; void Reset() override { - bEventInProgress = false; - uiPlayerGUID.Clear(); + Initialize(); } void StartEvent(ObjectGuid uiGUID) diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 44f559bfa79..cde2cf94e3c 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -222,13 +222,21 @@ public: struct npc_crusade_recruitAI : public ScriptedAI { - npc_crusade_recruitAI(Creature* creature) : ScriptedAI(creature) { } + npc_crusade_recruitAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + _heading = me->GetOrientation(); + } void Reset() override { me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER); - _heading = me->GetOrientation(); + Initialize(); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp index 99cda91b866..08d042582e5 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp @@ -170,9 +170,23 @@ public: { boss_exarch_maladaarAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); HasTaunted = false; } + void Initialize() + { + soulmodel = 0; + soulholder.Clear(); + soulclass = 0; + + Fear_timer = 15000 + rand32() % 5000; + Ribbon_of_Souls_timer = 5000; + StolenSoul_Timer = 25000 + rand32() % 10000; + + Avatar_summoned = false; + } + uint32 soulmodel; ObjectGuid soulholder; uint8 soulclass; @@ -186,15 +200,7 @@ public: void Reset() override { - soulmodel = 0; - soulholder.Clear(); - soulclass = 0; - - Fear_timer = 15000 + rand32() % 5000; - Ribbon_of_Souls_timer = 5000; - StolenSoul_Timer = 25000 + rand32() % 10000; - - Avatar_summoned = false; + Initialize(); } void MoveInLineOfSight(Unit* who) override diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp index aa0f3daeef0..9e9f3f60a59 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp @@ -265,7 +265,6 @@ public: uint32 SummonDoomBlossomTimer; uint32 EnrageTimer; uint32 CrushingShadowsTimer; - uint32 ShadowOfDeathTimer; uint32 SummonShadowsTimer; uint32 RandomYellTimer; uint32 AggroTimer; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp index 9f51155b334..94b75727d69 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp @@ -83,6 +83,13 @@ public: { npc_inner_demonAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + } + + void Initialize() + { + ShadowBolt_Timer = 10000; + Link_Timer = 1000; } uint32 ShadowBolt_Timer; @@ -92,8 +99,7 @@ public: void Reset() override { - ShadowBolt_Timer = 10000; - Link_Timer = 1000; + Initialize(); } void SetGUID(ObjectGuid guid, int32 id/* = 0 */) override @@ -187,10 +193,30 @@ public: { boss_leotheras_the_blindAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); creature->GetPosition(x, y, z); instance = creature->GetInstanceScript(); } + void Initialize() + { + BanishTimer = 1000; + Whirlwind_Timer = 15000; + ChaosBlast_Timer = 1000; + SwitchToDemon_Timer = 45000; + SwitchToHuman_Timer = 60000; + Berserk_Timer = 600000; + InnerDemons_Timer = 30000; + + DealDamage = true; + DemonForm = false; + IsFinalForm = false; + NeedThreatReset = false; + EnrageUsed = false; + memset(InnderDemon, 0, sizeof(InnderDemon)); + InnerDemon_Count = 0; + } + InstanceScript* instance; uint32 Whirlwind_Timer; @@ -216,21 +242,8 @@ public: void Reset() override { CheckChannelers(); - BanishTimer = 1000; - Whirlwind_Timer = 15000; - ChaosBlast_Timer = 1000; - SwitchToDemon_Timer = 45000; - SwitchToHuman_Timer = 60000; - Berserk_Timer = 600000; - InnerDemons_Timer = 30000; + Initialize(); me->SetCanDualWield(true); - DealDamage = true; - DemonForm = false; - IsFinalForm = false; - NeedThreatReset = false; - EnrageUsed = false; - memset(InnderDemon, 0, sizeof(InnderDemon)); - InnerDemon_Count = 0; me->SetSpeed(MOVE_RUN, 2.0f, true); me->SetDisplayId(MODEL_NIGHTELF); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID , 0); @@ -600,15 +613,23 @@ public: struct boss_leotheras_the_blind_demonformAI : public ScriptedAI { - boss_leotheras_the_blind_demonformAI(Creature* creature) : ScriptedAI(creature) { } + boss_leotheras_the_blind_demonformAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + ChaosBlast_Timer = 1000; + DealDamage = true; + } uint32 ChaosBlast_Timer; bool DealDamage; void Reset() override { - ChaosBlast_Timer = 1000; - DealDamage = true; + Initialize(); } void StartEvent() @@ -675,10 +696,17 @@ public: { npc_greyheart_spellbinderAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); AddedBanish = false; } + void Initialize() + { + Mindblast_Timer = urand(3000, 8000); + Earthshock_Timer = urand(5000, 10000); + } + InstanceScript* instance; ObjectGuid leotherasGUID; @@ -690,8 +718,7 @@ public: void Reset() override { - Mindblast_Timer = urand(3000, 8000); - Earthshock_Timer = urand(5000, 10000); + Initialize(); instance->SetGuidData(DATA_LEOTHERAS_EVENT_STARTER, ObjectGuid::Empty); Creature* leotheras = ObjectAccessor::GetCreature(*me, leotherasGUID); diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index 83b8722ce47..0fffdaa0554 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -88,10 +88,30 @@ public: { boss_the_lurker_belowAI(Creature* creature) : ScriptedAI(creature), Summons(me) { + Initialize(); SetCombatMovement(false); instance = creature->GetInstanceScript(); } + void Initialize() + { + SpoutAnimTimer = 1000; + RotTimer = 0; + WaterboltTimer = 15000; // give time to get in range when fight starts + SpoutTimer = 45000; + WhirlTimer = 18000; // after avery spout + PhaseTimer = 120000; + GeyserTimer = rand32() % 5000 + 15000; + CheckTimer = 15000; // give time to get in range when fight starts + WaitTimer = 60000; // never reached + WaitTimer2 = 60000; // never reached + + Submerged = true; // will be false at combat start + Spawned = false; + InRange = false; + CanStartEvent = false; + } + InstanceScript* instance; SummonList Summons; @@ -121,21 +141,7 @@ public: { me->SetSwim(true); me->SetDisableGravity(true); - SpoutAnimTimer = 1000; - RotTimer = 0; - WaterboltTimer = 15000; // give time to get in range when fight starts - SpoutTimer = 45000; - WhirlTimer = 18000; // after avery spout - PhaseTimer = 120000; - GeyserTimer = rand32() % 5000 + 15000; - CheckTimer = 15000; // give time to get in range when fight starts - WaitTimer = 60000; // never reached - WaitTimer2 = 60000; // never reached - - Submerged = true; // will be false at combat start - Spawned = false; - InRange = false; - CanStartEvent = false; + Initialize(); Summons.DespawnAll(); @@ -374,16 +380,22 @@ public: { npc_coilfang_ambusherAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); SetCombatMovement(false); } + void Initialize() + { + MultiShotTimer = 10000; + ShootBowTimer = 4000; + } + uint32 MultiShotTimer; uint32 ShootBowTimer; void Reset() override { - MultiShotTimer = 10000; - ShootBowTimer = 4000; + Initialize(); } void MoveInLineOfSight(Unit* who) override diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp index 0a538ac0c39..ccf7903ebe3 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp @@ -98,12 +98,28 @@ public: { boss_morogrim_tidewalkerAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); + Playercount = 0; + counter = 0; } - InstanceScript* instance; + void Initialize() + { + TidalWave_Timer = 10000; + WateryGrave_Timer = 30000; + Earthquake_Timer = 40000; + WateryGlobules_Timer = 0; + globulespell[0] = SPELL_SUMMON_WATER_GLOBULE_1; + globulespell[1] = SPELL_SUMMON_WATER_GLOBULE_2; + globulespell[2] = SPELL_SUMMON_WATER_GLOBULE_3; + globulespell[3] = SPELL_SUMMON_WATER_GLOBULE_4; + + Earthquake = false; + Phase2 = false; + } - Map::PlayerList const* PlayerList; + InstanceScript* instance; uint32 TidalWave_Timer; uint32 WateryGrave_Timer; @@ -118,17 +134,7 @@ public: void Reset() override { - TidalWave_Timer = 10000; - WateryGrave_Timer = 30000; - Earthquake_Timer = 40000; - WateryGlobules_Timer = 0; - globulespell[0] = SPELL_SUMMON_WATER_GLOBULE_1; - globulespell[1] = SPELL_SUMMON_WATER_GLOBULE_2; - globulespell[2] = SPELL_SUMMON_WATER_GLOBULE_3; - globulespell[3] = SPELL_SUMMON_WATER_GLOBULE_4; - - Earthquake = false; - Phase2 = false; + Initialize(); instance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, NOT_STARTED); } @@ -154,8 +160,7 @@ public: void EnterCombat(Unit* /*who*/) override { - PlayerList = &me->GetMap()->GetPlayers(); - Playercount = PlayerList->getSize(); + Playercount = me->GetMap()->GetPlayers().getSize(); StartEvent(); } @@ -296,13 +301,21 @@ public: struct npc_water_globuleAI : public ScriptedAI { - npc_water_globuleAI(Creature* creature) : ScriptedAI(creature) { } + npc_water_globuleAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Check_Timer = 1000; + } uint32 Check_Timer; void Reset() override { - Check_Timer = 1000; + Initialize(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp index 3207727b5d1..745c44eebec 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp @@ -64,9 +64,21 @@ public: { boss_mekgineer_steamriggerAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + Shrink_Timer = 20000; + Saw_Blade_Timer = 15000; + Electrified_Net_Timer = 10000; + + Summon75 = false; + Summon50 = false; + Summon25 = false; + } + InstanceScript* instance; uint32 Shrink_Timer; @@ -78,13 +90,7 @@ public: void Reset() override { - Shrink_Timer = 20000; - Saw_Blade_Timer = 15000; - Electrified_Net_Timer = 10000; - - Summon75 = false; - Summon50 = false; - Summon25 = false; + Initialize(); instance->SetBossState(DATA_MEKGINEER_STEAMRIGGER, NOT_STARTED); } @@ -201,16 +207,22 @@ public: { npc_steamrigger_mechanicAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + Repair_Timer = 2000; + } + InstanceScript* instance; uint32 Repair_Timer; void Reset() override { - Repair_Timer = 2000; + Initialize(); } void MoveInLineOfSight(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp index 8024d5138eb..16b84e53cfd 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp @@ -110,9 +110,18 @@ public: { boss_warlord_kalithreshAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + Reflection_Timer = 10000; + Impale_Timer = 7000 + rand32() % 7000; + Rage_Timer = 45000; + CanRage = false; + } + InstanceScript* instance; uint32 Reflection_Timer; @@ -122,10 +131,7 @@ public: void Reset() override { - Reflection_Timer = 10000; - Impale_Timer = 7000 + rand32() % 7000; - Rage_Timer = 45000; - CanRage = false; + Initialize(); instance->SetBossState(DATA_WARLORD_KALITHRESH, NOT_STARTED); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp index 6fb41f2eab5..546ed38082f 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp @@ -48,12 +48,20 @@ class boss_rokmar_the_crackler : public CreatureScript struct boss_rokmar_the_cracklerAI : public BossAI { - boss_rokmar_the_cracklerAI(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER) { } + boss_rokmar_the_cracklerAI(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER) + { + Initialize(); + } + + void Initialize() + { + rokmarFrenzy = false; + } void Reset() override { _Reset(); - rokmarFrenzy = false; + Initialize(); } void JustDied(Unit* /*killer*/) override diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp index 90853138448..f097b2c1551 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp @@ -50,6 +50,14 @@ public: { boss_hungarfenAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + } + + void Initialize() + { + Root = false; + Mushroom_Timer = 5000; // 1 mushroom after 5s, then one per 10s. This should be different in heroic mode + AcidGeyser_Timer = 10000; } bool Root; @@ -58,9 +66,7 @@ public: void Reset() override { - Root = false; - Mushroom_Timer = 5000; // 1 mushroom after 5s, then one per 10s. This should be different in heroic mode - AcidGeyser_Timer = 10000; + Initialize(); } void EnterCombat(Unit* /*who*/) override @@ -116,7 +122,17 @@ public: struct npc_underbog_mushroomAI : public ScriptedAI { - npc_underbog_mushroomAI(Creature* creature) : ScriptedAI(creature) { } + npc_underbog_mushroomAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Stop = false; + Grow_Timer = 0; + Shrink_Timer = 20000; + } bool Stop; uint32 Grow_Timer; @@ -124,9 +140,7 @@ public: void Reset() override { - Stop = false; - Grow_Timer = 0; - Shrink_Timer = 20000; + Initialize(); DoCast(me, SPELL_PUTRID_MUSHROOM, true); DoCast(me, SPELL_SPORE_CLOUD, true); diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp index d3b11d481fb..e8ce29e9f1a 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp @@ -56,6 +56,19 @@ public: { boss_the_black_stalkerAI(Creature* creature) : ScriptedAI(creature), Striders(creature) { + Initialize(); + InAir = false; + } + + void Initialize() + { + Levitate_Timer = 12000; + ChainLightning_Timer = 6000; + StaticCharge_Timer = 10000; + SporeStriders_Timer = 10000 + rand32() % 5000; + check_Timer = 5000; + LevitatedTarget.Clear(); + LevitatedTarget_Timer = 0; } uint32 SporeStriders_Timer; @@ -70,13 +83,7 @@ public: void Reset() override { - Levitate_Timer = 12000; - ChainLightning_Timer = 6000; - StaticCharge_Timer = 10000; - SporeStriders_Timer = 10000 + rand32() % 5000; - check_Timer = 5000; - LevitatedTarget.Clear(); - LevitatedTarget_Timer = 0; + Initialize(); Striders.DespawnAll(); } diff --git a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp index 592ffc1f69e..2cee741cbf3 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp @@ -72,7 +72,21 @@ class boss_gruul : public CreatureScript struct boss_gruulAI : public BossAI { - boss_gruulAI(Creature* creature) : BossAI(creature, DATA_GRUUL) { } + boss_gruulAI(Creature* creature) : BossAI(creature, DATA_GRUUL) + { + Initialize(); + } + + void Initialize() + { + m_uiGrowth_Timer = 30000; + m_uiCaveIn_Timer = 27000; + m_uiCaveIn_StaticTimer = 30000; + m_uiGroundSlamTimer = 35000; + m_bPerformingGroundSlam = false; + m_uiHurtfulStrike_Timer = 8000; + m_uiReverberation_Timer = 60000 + 45000; + } uint32 m_uiGrowth_Timer; uint32 m_uiCaveIn_Timer; @@ -86,13 +100,7 @@ class boss_gruul : public CreatureScript void Reset() override { _Reset(); - m_uiGrowth_Timer= 30000; - m_uiCaveIn_Timer= 27000; - m_uiCaveIn_StaticTimer = 30000; - m_uiGroundSlamTimer= 35000; - m_bPerformingGroundSlam= false; - m_uiHurtfulStrike_Timer= 8000; - m_uiReverberation_Timer= 60000+45000; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp index 0fcc7310d07..4dcfe2be4cb 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp @@ -77,9 +77,21 @@ public: { boss_high_king_maulgarAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + ArcingSmash_Timer = 10000; + MightyBlow_Timer = 40000; + Whirlwind_Timer = 30000; + Charging_Timer = 0; + Roar_Timer = 0; + + Phase2 = false; + } + InstanceScript* instance; uint32 ArcingSmash_Timer; @@ -92,16 +104,10 @@ public: void Reset() override { - ArcingSmash_Timer = 10000; - MightyBlow_Timer = 40000; - Whirlwind_Timer = 30000; - Charging_Timer = 0; - Roar_Timer = 0; + Initialize(); DoCast(me, SPELL_DUAL_WIELD, false); - Phase2 = false; - instance->SetBossState(DATA_MAULGAR, NOT_STARTED); } @@ -209,20 +215,26 @@ public: { boss_olm_the_summonerAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + DarkDecay_Timer = 10000; + Summon_Timer = 15000; + DeathCoil_Timer = 20000; + } + uint32 DarkDecay_Timer; uint32 Summon_Timer; - uint32 DeathCoil_Timer; + uint32 DeathCoil_Timer; InstanceScript* instance; void Reset() override { - DarkDecay_Timer = 10000; - Summon_Timer = 15000; - DeathCoil_Timer = 20000; + Initialize(); instance->SetBossState(DATA_MAULGAR, NOT_STARTED); } @@ -305,9 +317,18 @@ public: { boss_kiggler_the_crazedAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + GreaterPolymorph_Timer = 5000; + LightningBolt_Timer = 10000; + ArcaneShock_Timer = 20000; + ArcaneExplosion_Timer = 30000; + } + uint32 GreaterPolymorph_Timer; uint32 LightningBolt_Timer; uint32 ArcaneShock_Timer; @@ -317,10 +338,7 @@ public: void Reset() override { - GreaterPolymorph_Timer = 5000; - LightningBolt_Timer = 10000; - ArcaneShock_Timer = 20000; - ArcaneExplosion_Timer = 30000; + Initialize(); instance->SetBossState(DATA_MAULGAR, NOT_STARTED); } @@ -393,9 +411,17 @@ public: { boss_blindeye_the_seerAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + GreaterPowerWordShield_Timer = 5000; + Heal_Timer = urand(25000, 40000); + PrayerofHealing_Timer = urand(45000, 55000); + } + uint32 GreaterPowerWordShield_Timer; uint32 Heal_Timer; uint32 PrayerofHealing_Timer; @@ -404,9 +430,7 @@ public: void Reset() override { - GreaterPowerWordShield_Timer = 5000; - Heal_Timer = urand(25000, 40000); - PrayerofHealing_Timer = urand(45000, 55000); + Initialize(); instance->SetBossState(DATA_MAULGAR, NOT_STARTED); } @@ -470,9 +494,17 @@ public: { boss_krosh_firehandAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + GreaterFireball_Timer = 1000; + SpellShield_Timer = 5000; + BlastWave_Timer = 20000; + } + uint32 GreaterFireball_Timer; uint32 SpellShield_Timer; uint32 BlastWave_Timer; @@ -481,9 +513,7 @@ public: void Reset() override { - GreaterFireball_Timer = 1000; - SpellShield_Timer = 5000; - BlastWave_Timer = 20000; + Initialize(); instance->SetBossState(DATA_MAULGAR, NOT_STARTED); } diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp index da7074b131f..1d9eb81b1e7 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp @@ -65,6 +65,17 @@ class boss_kelidan_the_breaker : public CreatureScript { boss_kelidan_the_breakerAI(Creature* creature) : BossAI(creature, DATA_KELIDAN_THE_BREAKER) { + Initialize(); + } + + void Initialize() + { + ShadowVolley_Timer = 1000; + BurningNova_Timer = 15000; + Corruption_Timer = 5000; + check_Timer = 0; + Firenova = false; + addYell = false; } uint32 ShadowVolley_Timer; @@ -79,12 +90,7 @@ class boss_kelidan_the_breaker : public CreatureScript void Reset() override { _Reset(); - ShadowVolley_Timer = 1000; - BurningNova_Timer = 15000; - Corruption_Timer = 5000; - check_Timer = 0; - Firenova = false; - addYell = false; + Initialize(); SummonChannelers(); me->SetReactState(REACT_PASSIVE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE); @@ -271,7 +277,17 @@ class npc_shadowmoon_channeler : public CreatureScript struct npc_shadowmoon_channelerAI : public ScriptedAI { - npc_shadowmoon_channelerAI(Creature* creature) : ScriptedAI(creature){ } + npc_shadowmoon_channelerAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + ShadowBolt_Timer = 1000 + rand32() % 1000; + MarkOfShadow_Timer = 5000 + rand32() % 2000; + check_Timer = 0; + } uint32 ShadowBolt_Timer; uint32 MarkOfShadow_Timer; @@ -279,9 +295,7 @@ class npc_shadowmoon_channeler : public CreatureScript void Reset() override { - ShadowBolt_Timer = 1000 + rand32() % 1000; - MarkOfShadow_Timer = 5000 + rand32() % 2000; - check_Timer = 0; + Initialize(); if (me->IsNonMeleeSpellCast(false)) me->InterruptNonMeleeSpells(true); } diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp index 061d6a6a9a8..831818a4c9a 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp @@ -60,13 +60,12 @@ class boss_omor_the_unscarred : public CreatureScript { boss_omor_the_unscarredAI(Creature* creature) : BossAI(creature, DATA_OMOR_THE_UNSCARRED) { + Initialize(); SetCombatMovement(false); } - void Reset() override + void Initialize() { - Talk(SAY_WIPE); - OrbitalStrike_Timer = 25000; ShadowWhip_Timer = 2000; Aura_Timer = 10000; @@ -76,6 +75,13 @@ class boss_omor_the_unscarred : public CreatureScript SummonedCount = 0; PlayerGUID.Clear(); CanPullBack = false; + } + + void Reset() override + { + Talk(SAY_WIPE); + + Initialize(); _Reset(); } diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp index 44c93dc77c9..566c6439893 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp @@ -70,16 +70,24 @@ class boss_nazan : public CreatureScript { boss_nazanAI(Creature* creature) : BossAI(creature, DATA_NAZAN) { + Initialize(); flight = true; + BellowingRoar_Timer = 0; + ConeOfFire_Timer = 0; } - void Reset() override + void Initialize() { Fireball_Timer = 4000; Fly_Timer = 45000; Turn_Timer = 0; } + void Reset() override + { + Initialize(); + } + void EnterCombat(Unit* /*who*/) override { } void IsSummonedBy(Unit* summoner) override @@ -198,13 +206,21 @@ class boss_vazruden : public CreatureScript struct boss_vazrudenAI : public BossAI { - boss_vazrudenAI(Creature* creature) : BossAI(creature, DATA_VAZRUDEN) { } + boss_vazrudenAI(Creature* creature) : BossAI(creature, DATA_VAZRUDEN) + { + Initialize(); + } - void Reset() override + void Initialize() { Revenge_Timer = 4000; UnsummonCheck = 2000; WipeSaid = false; + } + + void Reset() override + { + Initialize(); _Reset(); } @@ -278,16 +294,22 @@ class boss_vazruden_the_herald : public CreatureScript { boss_vazruden_the_heraldAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); summoned = false; sentryDown = false; lootSpawned = false; } - void Reset() override + void Initialize() { phase = 0; waypoint = 0; check = 0; + } + + void Reset() override + { + Initialize(); UnsummonAdds(); } @@ -451,13 +473,21 @@ class npc_hellfire_sentry : public CreatureScript struct npc_hellfire_sentryAI : public ScriptedAI { - npc_hellfire_sentryAI(Creature* creature) : ScriptedAI(creature) { } + npc_hellfire_sentryAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { KidneyShot_Timer = urand(3000, 7000); } + void Reset() override + { + Initialize(); + } + void EnterCombat(Unit* /*who*/) override { } void JustDied(Unit* killer) override diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp index 5baaebc0d7b..2fbef051313 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp @@ -58,13 +58,21 @@ class boss_watchkeeper_gargolmar : public CreatureScript struct boss_watchkeeper_gargolmarAI : public BossAI { - boss_watchkeeper_gargolmarAI(Creature* creature) : BossAI(creature, DATA_WATCHKEEPER_GARGOLMAR) { } + boss_watchkeeper_gargolmarAI(Creature* creature) : BossAI(creature, DATA_WATCHKEEPER_GARGOLMAR) + { + Initialize(); + } - void Reset() override + void Initialize() { - hasTaunted = false; + hasTaunted = false; yelledForHeal = false; - retaliation = false; + retaliation = false; + } + + void Reset() override + { + Initialize(); _Reset(); } diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp index 1c3eb6d8c34..7b8eeb8834d 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp @@ -34,7 +34,10 @@ class instance_ramparts : public InstanceMapScript struct instance_ramparts_InstanceMapScript : public InstanceScript { - instance_ramparts_InstanceMapScript(Map* map) : InstanceScript(map) { } + instance_ramparts_InstanceMapScript(Map* map) : InstanceScript(map) + { + spawned = false; + } void Initialize() override { diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp index 50cdcfe121b..e7c1e60e432 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp @@ -100,17 +100,23 @@ class npc_abyssal : public CreatureScript { npc_abyssalAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); trigger = 0; Despawn_Timer = 60000; } + void Initialize() + { + FireBlast_Timer = 6000; + } + uint32 FireBlast_Timer; uint32 Despawn_Timer; uint32 trigger; void Reset() override { - FireBlast_Timer = 6000; + Initialize(); } void SpellHit(Unit*, const SpellInfo* spell) override @@ -207,11 +213,26 @@ class boss_magtheridon : public CreatureScript { boss_magtheridonAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10); me->SetFloatValue(UNIT_FIELD_COMBATREACH, 10); } + void Initialize() + { + Berserk_Timer = 1320000; + Quake_Timer = 40000; + Debris_Timer = 10000; + Blaze_Timer = 10000 + rand32() % 20000; + BlastNova_Timer = 60000; + Cleave_Timer = 15000; + RandChat_Timer = 90000; + + Phase3 = false; + NeedCheckCube = false; + } + CubeMap Cube; InstanceScript* instance; @@ -229,16 +250,7 @@ class boss_magtheridon : public CreatureScript void Reset() override { - Berserk_Timer = 1320000; - Quake_Timer = 40000; - Debris_Timer = 10000; - Blaze_Timer = 10000 + rand32() % 20000; - BlastNova_Timer = 60000; - Cleave_Timer = 15000; - RandChat_Timer = 90000; - - Phase3 = false; - NeedCheckCube = false; + Initialize(); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -468,9 +480,20 @@ class npc_hellfire_channeler : public CreatureScript { npc_hellfire_channelerAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + ShadowBoltVolley_Timer = urand(8000, 10000); + DarkMending_Timer = 10000; + Fear_Timer = urand(15000, 20000); + Infernal_Timer = urand(10000, 50000); + + Check_Timer = 5000; + } + InstanceScript* instance; uint32 ShadowBoltVolley_Timer; @@ -482,12 +505,7 @@ class npc_hellfire_channeler : public CreatureScript void Reset() override { - ShadowBoltVolley_Timer = urand(8000, 10000); - DarkMending_Timer = 10000; - Fear_Timer = urand(15000, 20000); - Infernal_Timer = urand(10000, 50000); - - Check_Timer = 5000; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp index 741d5b78285..59fb8b48e30 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp @@ -83,12 +83,13 @@ class boss_grand_warlock_nethekurse : public CreatureScript struct boss_grand_warlock_nethekurseAI : public BossAI { - boss_grand_warlock_nethekurseAI(Creature* creature) : BossAI(creature, DATA_NETHEKURSE) { } - - void Reset() override + boss_grand_warlock_nethekurseAI(Creature* creature) : BossAI(creature, DATA_NETHEKURSE) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + Initialize(); + } + void Initialize() + { IsIntroEvent = false; IntroOnce = false; IsMainEvent = false; @@ -105,6 +106,13 @@ class boss_grand_warlock_nethekurse : public CreatureScript Cleave_Timer = 5000; } + void Reset() override + { + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + + Initialize(); + } + void JustDied(Unit* /*killer*/) override { Talk(SAY_DIE); diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp index f60c65b0b7a..2d33bee4091 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp @@ -136,6 +136,26 @@ class boss_warbringer_omrogg : public CreatureScript { boss_warbringer_omroggAI(Creature* creature) : BossAI(creature, DATA_OMROGG) { + Initialize(); + iaggro = 0; + ithreat = 0; + ikilling = 0; + } + + void Initialize() + { + AggroYell = false; + ThreatYell = false; + ThreatYell2 = false; + KillingYell = false; + + Delay_Timer = 4000; + BlastWave_Timer = 0; + BlastCount = 0; + Fear_Timer = 8000; + BurningMaul_Timer = 25000; + ThunderClap_Timer = 15000; + ResetThreat_Timer = 30000; } void Reset() override @@ -152,18 +172,7 @@ class boss_warbringer_omrogg : public CreatureScript RightHeadGUID.Clear(); } - AggroYell = false; - ThreatYell = false; - ThreatYell2 = false; - KillingYell = false; - - Delay_Timer = 4000; - BlastWave_Timer = 0; - BlastCount = 0; - Fear_Timer = 8000; - BurningMaul_Timer = 25000; - ThunderClap_Timer = 15000; - ResetThreat_Timer = 30000; + Initialize(); instance->SetData(DATA_OMROGG, NOT_STARTED); //End boss can use this later. O'mrogg must be defeated(DONE) or he will come to aid. } diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp index 7145ebfd7aa..ff8bb84c397 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp @@ -65,15 +65,14 @@ class boss_warchief_kargath_bladefist : public CreatureScript struct boss_warchief_kargath_bladefistAI : public BossAI { - boss_warchief_kargath_bladefistAI(Creature* creature) : BossAI(creature, DATA_KARGATH) { } - - void Reset() override + boss_warchief_kargath_bladefistAI(Creature* creature) : BossAI(creature, DATA_KARGATH) { - removeAdds(); - - me->SetSpeed(MOVE_RUN, 2); - me->SetWalk(false); + Initialize(); + target_num = 0; + } + void Initialize() + { summoned = 2; InBlade = false; Wait_Timer = 0; @@ -85,6 +84,16 @@ class boss_warchief_kargath_bladefist : public CreatureScript resetcheck_timer = 5000; } + void Reset() override + { + removeAdds(); + + me->SetSpeed(MOVE_RUN, 2); + me->SetWalk(false); + + Initialize(); + } + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index 8dd1aad5d4d..0f9547a2b37 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -81,8 +81,28 @@ class boss_alar : public CreatureScript { boss_alarAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); DefaultMoveSpeedRate = creature->GetSpeedRate(MOVE_RUN); + DiveBomb_Timer = 0; + MeltArmor_Timer = 0; + Charge_Timer = 0; + FlamePatch_Timer = 0; + } + + void Initialize() + { + Berserk_Timer = 1200000; + Platforms_Move_Timer = 0; + + Phase1 = true; + WaitEvent = WE_NONE; + WaitTimer = 0; + AfterMoving = false; + ForceMove = false; + ForceTimer = 5000; + + cur_wp = 4; } InstanceScript* instance; @@ -111,17 +131,7 @@ class boss_alar : public CreatureScript { instance->SetData(DATA_ALAREVENT, NOT_STARTED); - Berserk_Timer = 1200000; - Platforms_Move_Timer = 0; - - Phase1 = true; - WaitEvent = WE_NONE; - WaitTimer = 0; - AfterMoving = false; - ForceMove = false; - ForceTimer = 5000; - - cur_wp = 4; + Initialize(); me->SetDisplayId(me->GetNativeDisplayId()); me->SetSpeed(MOVE_RUN, DefaultMoveSpeedRate); @@ -461,17 +471,23 @@ class npc_ember_of_alar : public CreatureScript { npc_ember_of_alarAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); creature->SetDisableGravity(true); creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); } + void Initialize() + { + toDie = false; + } + InstanceScript* instance; bool toDie; void Reset() override { - toDie = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp index 0a9e5665ec8..cd433000e8e 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp @@ -101,10 +101,29 @@ class boss_high_astromancer_solarian : public CreatureScript { boss_high_astromancer_solarianAI(Creature* creature) : ScriptedAI(creature), Summons(me) { + Initialize(); instance = creature->GetInstanceScript(); defaultarmor = creature->GetArmor(); defaultsize = creature->GetObjectScale(); + memset(Portals, 0, sizeof(Portals)); + } + + void Initialize() + { + ArcaneMissiles_Timer = 2000; + m_uiWrathOfTheAstromancer_Timer = 15000; + BlindingLight_Timer = 41000; + Fear_Timer = 20000; + VoidBolt_Timer = 10000; + Phase1_Timer = 50000; + Phase2_Timer = 10000; + Phase3_Timer = 15000; + AppearDelay_Timer = 2000; + BlindingLight = false; + AppearDelay = false; + Wrath_Timer = 20000 + rand32() % 5000;//twice in phase one + Phase = 1; } InstanceScript* instance; @@ -132,19 +151,7 @@ class boss_high_astromancer_solarian : public CreatureScript void Reset() override { - ArcaneMissiles_Timer = 2000; - m_uiWrathOfTheAstromancer_Timer = 15000; - BlindingLight_Timer = 41000; - Fear_Timer = 20000; - VoidBolt_Timer = 10000; - Phase1_Timer = 50000; - Phase2_Timer = 10000; - Phase3_Timer = 15000; - AppearDelay_Timer = 2000; - BlindingLight = false; - AppearDelay = false; - Wrath_Timer = 20000 + rand32() % 5000;//twice in phase one - Phase = 1; + Initialize(); instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, NOT_STARTED); @@ -433,9 +440,17 @@ class npc_solarium_priest : public CreatureScript { npc_solarium_priestAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + healTimer = 9000; + holysmiteTimer = 1; + aoesilenceTimer = 15000; + } + InstanceScript* instance; uint32 healTimer; @@ -444,9 +459,7 @@ class npc_solarium_priest : public CreatureScript void Reset() override { - healTimer = 9000; - holysmiteTimer = 1; - aoesilenceTimer = 15000; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index 8b23ee172af..961f07bd823 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -155,10 +155,18 @@ struct advisorbase_ai : public ScriptedAI { advisorbase_ai(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); m_bDoubled_Health = false; } + void Initialize() + { + FakeDeath = false; + DelayRes_Timer = 0; + DelayRes_Target.Clear(); + } + InstanceScript* instance; bool FakeDeath; bool m_bDoubled_Health; @@ -173,9 +181,7 @@ struct advisorbase_ai : public ScriptedAI m_bDoubled_Health = false; } - FakeDeath = false; - DelayRes_Timer = 0; - DelayRes_Target.Clear(); + Initialize(); me->SetStandState(UNIT_STAND_STATE_STAND); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -289,7 +295,29 @@ class boss_kaelthas : public CreatureScript { boss_kaelthasAI(Creature* creature) : ScriptedAI(creature), summons(me) { + Initialize(); instance = creature->GetInstanceScript(); + PhaseSubphase = 0; + Phase_Timer = 0; + } + + void Initialize() + { + Fireball_Timer = 5000 + rand32() % 10000; + ArcaneDisruption_Timer = 45000; + MindControl_Timer = 40000; + Phoenix_Timer = 50000; + ShockBarrier_Timer = 60000; + FlameStrike_Timer = 30000; + GravityLapse_Timer = 20000; + GravityLapse_Phase = 0; + NetherBeam_Timer = 8000; + NetherVapor_Timer = 10000; + PyrosCast = 0; + Phase = 0; + InGravityLapse = false; + IsCastingFireball = false; + ChainPyros = false; } InstanceScript* instance; @@ -319,21 +347,7 @@ class boss_kaelthas : public CreatureScript void Reset() override { - Fireball_Timer = 5000 + rand32() % 10000; - ArcaneDisruption_Timer = 45000; - MindControl_Timer = 40000; - Phoenix_Timer = 50000; - ShockBarrier_Timer = 60000; - FlameStrike_Timer = 30000; - GravityLapse_Timer = 20000; - GravityLapse_Phase = 0; - NetherBeam_Timer = 8000; - NetherVapor_Timer = 10000; - PyrosCast = 0; - Phase = 0; - InGravityLapse = false; - IsCastingFireball = false; - ChainPyros = false; + Initialize(); if (me->IsInCombat()) PrepareAdvisors(); @@ -1016,7 +1030,17 @@ class boss_thaladred_the_darkener : public CreatureScript } struct boss_thaladred_the_darkenerAI : public advisorbase_ai { - boss_thaladred_the_darkenerAI(Creature* creature) : advisorbase_ai(creature) { } + boss_thaladred_the_darkenerAI(Creature* creature) : advisorbase_ai(creature) + { + Initialize(); + } + + void Initialize() + { + Gaze_Timer = 100; + Silence_Timer = 20000; + PsychicBlow_Timer = 10000; + } uint32 Gaze_Timer; uint32 Silence_Timer; @@ -1024,9 +1048,7 @@ class boss_thaladred_the_darkener : public CreatureScript void Reset() override { - Gaze_Timer = 100; - Silence_Timer = 20000; - PsychicBlow_Timer = 10000; + Initialize(); advisorbase_ai::Reset(); } @@ -1114,13 +1136,21 @@ class boss_lord_sanguinar : public CreatureScript } struct boss_lord_sanguinarAI : public advisorbase_ai { - boss_lord_sanguinarAI(Creature* creature) : advisorbase_ai(creature) { } + boss_lord_sanguinarAI(Creature* creature) : advisorbase_ai(creature) + { + Initialize(); + } + + void Initialize() + { + Fear_Timer = 20000; + } uint32 Fear_Timer; void Reset() override { - Fear_Timer = 20000; + Initialize(); advisorbase_ai::Reset(); } @@ -1181,7 +1211,19 @@ class boss_grand_astromancer_capernian : public CreatureScript } struct boss_grand_astromancer_capernianAI : public advisorbase_ai { - boss_grand_astromancer_capernianAI(Creature* creature) : advisorbase_ai(creature) { } + boss_grand_astromancer_capernianAI(Creature* creature) : advisorbase_ai(creature) + { + Initialize(); + } + + void Initialize() + { + Fireball_Timer = 2000; + Conflagration_Timer = 20000; + ArcaneExplosion_Timer = 5000; + Yell_Timer = 2000; + Yell = false; + } uint32 Fireball_Timer; uint32 Conflagration_Timer; @@ -1191,11 +1233,7 @@ class boss_grand_astromancer_capernian : public CreatureScript void Reset() override { - Fireball_Timer = 2000; - Conflagration_Timer = 20000; - ArcaneExplosion_Timer = 5000; - Yell_Timer = 2000; - Yell = false; + Initialize(); advisorbase_ai::Reset(); } @@ -1326,15 +1364,23 @@ class boss_master_engineer_telonicus : public CreatureScript } struct boss_master_engineer_telonicusAI : public advisorbase_ai { - boss_master_engineer_telonicusAI(Creature* creature) : advisorbase_ai(creature) { } + boss_master_engineer_telonicusAI(Creature* creature) : advisorbase_ai(creature) + { + Initialize(); + } + + void Initialize() + { + Bomb_Timer = 10000; + RemoteToy_Timer = 5000; + } uint32 Bomb_Timer; uint32 RemoteToy_Timer; void Reset() override { - Bomb_Timer = 10000; - RemoteToy_Timer = 5000; + Initialize(); advisorbase_ai::Reset(); } @@ -1411,18 +1457,24 @@ class npc_kael_flamestrike : public CreatureScript { npc_kael_flamestrikeAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); SetCombatMovement(false); } + void Initialize() + { + Timer = 5000; + Casting = false; + KillSelf = false; + } + uint32 Timer; bool Casting; bool KillSelf; void Reset() override { - Timer = 5000; - Casting = false; - KillSelf = false; + Initialize(); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->setFaction(14); @@ -1477,13 +1529,21 @@ class npc_phoenix_tk : public CreatureScript } struct npc_phoenix_tkAI : public ScriptedAI { - npc_phoenix_tkAI(Creature* creature) : ScriptedAI(creature) { } + npc_phoenix_tkAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Cycle_Timer = 2000; + } uint32 Cycle_Timer; void Reset() override { - Cycle_Timer = 2000; + Initialize(); DoCast(me, SPELL_BURN, true); } @@ -1531,13 +1591,21 @@ class npc_phoenix_egg_tk : public CreatureScript } struct npc_phoenix_egg_tkAI : public ScriptedAI { - npc_phoenix_egg_tkAI(Creature* creature) : ScriptedAI(creature) { } + npc_phoenix_egg_tkAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Rebirth_Timer = 15000; + } uint32 Rebirth_Timer; void Reset() override { - Rebirth_Timer = 15000; + Initialize(); } //ignore any diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp index b518eb1cb8b..dd97d10cfbe 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp @@ -56,9 +56,20 @@ class boss_void_reaver : public CreatureScript { boss_void_reaverAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + Pounding_Timer = 15000; + ArcaneOrb_Timer = 3000; + KnockAway_Timer = 30000; + Berserk_Timer = 600000; + + Enraged = false; + } + InstanceScript* instance; uint32 Pounding_Timer; @@ -70,12 +81,7 @@ class boss_void_reaver : public CreatureScript void Reset() override { - Pounding_Timer = 15000; - ArcaneOrb_Timer = 3000; - KnockAway_Timer = 30000; - Berserk_Timer = 600000; - - Enraged = false; + Initialize(); if (me->IsAlive()) instance->SetData(DATA_VOIDREAVEREVENT, NOT_STARTED); diff --git a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp index 32af9f647ad..22526465283 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp @@ -47,15 +47,23 @@ class npc_crystalcore_devastator : public CreatureScript } struct npc_crystalcore_devastatorAI : public ScriptedAI { - npc_crystalcore_devastatorAI(Creature* creature) : ScriptedAI(creature) { } + npc_crystalcore_devastatorAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Countercharge_Timer = 9000; + Knockaway_Timer = 25000; + } uint32 Knockaway_Timer; uint32 Countercharge_Timer; void Reset() override { - Countercharge_Timer = 9000; - Knockaway_Timer = 25000; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp index 3e4e6a213bd..276b291e236 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp @@ -151,9 +151,18 @@ class npc_ragin_flames : public CreatureScript { npc_ragin_flamesAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + inferno_Timer = 10000; + flame_timer = 500; + Check_Timer = 2000; + onlyonce = false; + } + InstanceScript* instance; uint32 inferno_Timer; @@ -164,10 +173,7 @@ class npc_ragin_flames : public CreatureScript void Reset() override { - inferno_Timer = 10000; - flame_timer = 500; - Check_Timer = 2000; - onlyonce = false; + Initialize(); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true); me->SetSpeed(MOVE_RUN, DUNGEON_MODE(0.5f, 0.7f)); diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp index 3c6fe2040fc..8f416d3aa8c 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp @@ -172,7 +172,18 @@ class npc_nether_wraith : public CreatureScript struct npc_nether_wraithAI : public ScriptedAI { - npc_nether_wraithAI(Creature* creature) : ScriptedAI(creature) { } + npc_nether_wraithAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + ArcaneMissiles_Timer = urand(1000, 4000); + Detonation_Timer = 20000; + Die_Timer = 2200; + Detonation = false; + } uint32 ArcaneMissiles_Timer; uint32 Detonation_Timer; @@ -181,10 +192,7 @@ class npc_nether_wraith : public CreatureScript void Reset() override { - ArcaneMissiles_Timer = urand(1000, 4000); - Detonation_Timer = 20000; - Die_Timer = 2200; - Detonation = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp index 1a8658c8fbc..cb875e26c42 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp @@ -75,9 +75,21 @@ class npc_millhouse_manastorm : public CreatureScript { npc_millhouse_manastormAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + EventProgress_Timer = 2000; + LowHp = false; + Init = false; + Phase = 1; + + Pyroblast_Timer = 1000; + Fireball_Timer = 2500; + } + InstanceScript* instance; uint32 EventProgress_Timer; @@ -90,13 +102,7 @@ class npc_millhouse_manastorm : public CreatureScript void Reset() override { - EventProgress_Timer = 2000; - LowHp = false; - Init = false; - Phase = 1; - - Pyroblast_Timer = 1000; - Fireball_Timer = 2500; + Initialize(); if (instance->GetData(DATA_WARDEN_2) == DONE) Init = true; @@ -271,9 +277,19 @@ class npc_warden_mellichar : public CreatureScript { npc_warden_mellicharAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + IsRunning = false; + CanSpawn = false; + + EventProgress_Timer = 22000; + Phase = 1; + } + InstanceScript* instance; bool IsRunning; @@ -284,11 +300,7 @@ class npc_warden_mellichar : public CreatureScript void Reset() override { - IsRunning = false; - CanSpawn = false; - - EventProgress_Timer = 22000; - Phase = 1; + Initialize(); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); DoCast(me, SPELL_TARGET_OMEGA); diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp index ec22baf2d4e..2d549e590c5 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp @@ -67,9 +67,23 @@ class boss_harbinger_skyriss : public CreatureScript { boss_harbinger_skyrissAI(Creature* creature) : BossAI(creature, DATA_HARBINGER_SKYRISS) { + Initialize(); Intro = false; } + void Initialize() + { + IsImage33 = false; + IsImage66 = false; + + Intro_Phase = 1; + Intro_Timer = 5000; + MindRend_Timer = 3000; + Fear_Timer = 15000; + Domination_Timer = 30000; + ManaBurn_Timer = 25000; + } + bool Intro; bool IsImage33; bool IsImage66; @@ -86,15 +100,7 @@ class boss_harbinger_skyriss : public CreatureScript if (!Intro) me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); - IsImage33 = false; - IsImage66 = false; - - Intro_Phase = 1; - Intro_Timer = 5000; - MindRend_Timer = 3000; - Fear_Timer = 15000; - Domination_Timer = 30000; - ManaBurn_Timer = 25000; + Initialize(); } void MoveInLineOfSight(Unit* who) override diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp index 7b831e82a75..e254d92bac8 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp @@ -50,12 +50,20 @@ class boss_commander_sarannis : public CreatureScript struct boss_commander_sarannisAI : public BossAI { - boss_commander_sarannisAI(Creature* creature) : BossAI(creature, DATA_COMMANDER_SARANNIS) { } + boss_commander_sarannisAI(Creature* creature) : BossAI(creature, DATA_COMMANDER_SARANNIS) + { + Initialize(); + } + + void Initialize() + { + _phase = true; + } void Reset() override { _Reset(); - _phase = true; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp index c0591f7b874..ff336216954 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp @@ -64,7 +64,19 @@ class boss_high_botanist_freywinn : public CreatureScript struct boss_high_botanist_freywinnAI : public BossAI { - boss_high_botanist_freywinnAI(Creature* creature) : BossAI(creature, DATA_HIGH_BOTANIST_FREYWINN) { } + boss_high_botanist_freywinnAI(Creature* creature) : BossAI(creature, DATA_HIGH_BOTANIST_FREYWINN) + { + Initialize(); + } + + void Initialize() + { + SummonSeedling_Timer = 6000; + TreeForm_Timer = 30000; + MoveCheck_Timer = 1000; + DeadAddsCount = 0; + MoveFree = true; + } uint32 SummonSeedling_Timer; uint32 TreeForm_Timer; @@ -76,11 +88,7 @@ class boss_high_botanist_freywinn : public CreatureScript { summons.DespawnAll(); - SummonSeedling_Timer = 6000; - TreeForm_Timer = 30000; - MoveCheck_Timer = 1000; - DeadAddsCount = 0; - MoveFree = true; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp index 768c9b5b8f1..0e25a6e0758 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp @@ -62,7 +62,19 @@ class boss_laj : public CreatureScript struct boss_lajAI : public BossAI { - boss_lajAI(Creature* creature) : BossAI(creature, DATA_LAJ) { } + boss_lajAI(Creature* creature) : BossAI(creature, DATA_LAJ) + { + Initialize(); + } + + void Initialize() + { + CanSummon = false; + Teleport_Timer = 20000; + Summon_Timer = 2500; + Transform_Timer = 30000; + Allergic_Timer = 5000; + } bool CanSummon; uint32 Teleport_Timer; @@ -79,11 +91,7 @@ class boss_laj : public CreatureScript me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, false); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false); - CanSummon = false; - Teleport_Timer = 20000; - Summon_Timer = 2500; - Transform_Timer = 30000; - Allergic_Timer = 5000; + Initialize(); } void DoTransform() diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp index 9114027b9fb..906c6e187ce 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp @@ -51,15 +51,23 @@ class boss_thorngrin_the_tender : public CreatureScript struct boss_thorngrin_the_tenderAI : public BossAI { - boss_thorngrin_the_tenderAI(Creature* creature) : BossAI(creature, DATA_THORNGRIN_THE_TENDER) { } + boss_thorngrin_the_tenderAI(Creature* creature) : BossAI(creature, DATA_THORNGRIN_THE_TENDER) + { + Initialize(); + } - void Reset() override + void Initialize() { - _Reset(); _phase1 = true; _phase2 = true; } + void Reset() override + { + _Reset(); + Initialize(); + } + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp index 56c62bbf50f..fbebe897477 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp @@ -74,6 +74,12 @@ class npc_warp_splinter_treant : public CreatureScript { npc_warp_splinter_treantAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + } + + void Initialize() + { + check_Timer = 0; } ObjectGuid WarpGuid; @@ -81,7 +87,7 @@ class npc_warp_splinter_treant : public CreatureScript void Reset() override { - check_Timer = 0; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -138,10 +144,18 @@ class boss_warp_splinter : public CreatureScript { boss_warp_splinterAI(Creature* creature) : BossAI(creature, DATA_WARP_SPLINTER) { + Initialize(); Treant_Spawn_Pos_X = creature->GetPositionX(); Treant_Spawn_Pos_Y = creature->GetPositionY(); } + void Initialize() + { + War_Stomp_Timer = urand(25000, 40000); + Summon_Treants_Timer = 45000; + Arcane_Volley_Timer = urand(8000, 20000); + } + uint32 War_Stomp_Timer; uint32 Summon_Treants_Timer; uint32 Arcane_Volley_Timer; @@ -151,9 +165,7 @@ class boss_warp_splinter : public CreatureScript void Reset() override { - War_Stomp_Timer = urand(25000, 40000); - Summon_Treants_Timer = 45000; - Arcane_Volley_Timer = urand(8000, 20000); + Initialize(); me->SetSpeed(MOVE_RUN, 0.7f, true); } diff --git a/src/server/scripts/Outland/boss_doomwalker.cpp b/src/server/scripts/Outland/boss_doomwalker.cpp index 7b72da0b02e..05113520566 100644 --- a/src/server/scripts/Outland/boss_doomwalker.cpp +++ b/src/server/scripts/Outland/boss_doomwalker.cpp @@ -57,6 +57,12 @@ class boss_doomwalker : public CreatureScript { boss_doomwalkerAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + } + + void Initialize() + { + _inEnrage = false; } void Reset() override @@ -67,7 +73,7 @@ class boss_doomwalker : public CreatureScript _events.ScheduleEvent(EVENT_CHAIN, urand(10000, 30000)); _events.ScheduleEvent(EVENT_QUAKE, urand(25000, 35000)); _events.ScheduleEvent(EVENT_OVERRUN, urand(30000, 45000)); - _inEnrage = false; + Initialize(); } void KilledUnit(Unit* victim) override diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index 5c95376cdfc..5941bd3decf 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -242,7 +242,21 @@ public: struct npc_nether_drakeAI : public ScriptedAI { - npc_nether_drakeAI(Creature* creature) : ScriptedAI(creature) { } + npc_nether_drakeAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + IsNihil = false; + NihilSpeech_Timer = 3000; + NihilSpeech_Phase = 0; + + ArcaneBlast_Timer = 7500; + ManaBurn_Timer = 10000; + IntangiblePresence_Timer = 15000; + } bool IsNihil; uint32 NihilSpeech_Timer; @@ -254,13 +268,7 @@ public: void Reset() override { - IsNihil = false; - NihilSpeech_Timer = 3000; - NihilSpeech_Phase = 0; - - ArcaneBlast_Timer = 7500; - ManaBurn_Timer = 10000; - IntangiblePresence_Timer = 15000; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -602,7 +610,17 @@ class npc_simon_bunny : public CreatureScript struct npc_simon_bunnyAI : public ScriptedAI { - npc_simon_bunnyAI(Creature* creature) : ScriptedAI(creature) { } + npc_simon_bunnyAI(Creature* creature) : ScriptedAI(creature) + { + large = false; + listening = false; + gameLevel = 0; + fails = 0; + gameTicks = 0; + memset(clusterIds, 0, sizeof(clusterIds)); + zCoordCorrection = 0.f; + searchDistance = 0.f; + } bool large; bool listening; diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp index 01ad2ce334f..79e6649495b 100644 --- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp +++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp @@ -58,13 +58,21 @@ public: struct npc_aeranasAI : public ScriptedAI { - npc_aeranasAI(Creature* creature) : ScriptedAI(creature) { } + npc_aeranasAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { faction_Timer = 8000; envelopingWinds_Timer = 9000; shock_Timer = 5000; + } + + void Reset() override + { + Initialize(); me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); me->setFaction(FACTION_FRIENDLY); @@ -305,14 +313,22 @@ public: struct npc_fel_guard_houndAI : public ScriptedAI { - npc_fel_guard_houndAI(Creature* creature) : ScriptedAI(creature) { } + npc_fel_guard_houndAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { checkTimer = 5000; //check for creature every 5 sec helboarGUID.Clear(); } + void Reset() override + { + Initialize(); + } + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE || id != 1) diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp index b8dd1393600..c08f891d13f 100644 --- a/src/server/scripts/Outland/zone_nagrand.cpp +++ b/src/server/scripts/Outland/zone_nagrand.cpp @@ -338,15 +338,23 @@ public: struct npc_corkiAI : public ScriptedAI { - npc_corkiAI(Creature* creature) : ScriptedAI(creature) { } + npc_corkiAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Say_Timer = 5000; + ReleasedFromCage = false; + } uint32 Say_Timer; bool ReleasedFromCage; void Reset() override { - Say_Timer = 5000; - ReleasedFromCage = false; + Initialize(); } void UpdateAI(uint32 diff) override @@ -441,7 +449,17 @@ public: struct npc_kurenai_captiveAI : public npc_escortAI { - npc_kurenai_captiveAI(Creature* creature) : npc_escortAI(creature) { } + npc_kurenai_captiveAI(Creature* creature) : npc_escortAI(creature) + { + Initialize(); + } + + void Initialize() + { + ChainLightningTimer = 1000; + HealTimer = 0; + FrostShockTimer = 6000; + } uint32 ChainLightningTimer; uint32 HealTimer; @@ -449,9 +467,7 @@ public: void Reset() override { - ChainLightningTimer = 1000; - HealTimer = 0; - FrostShockTimer = 6000; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index eb2fae03202..8bc94663f30 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -81,7 +81,22 @@ public: struct npc_commander_dawnforgeAI : public ScriptedAI { - npc_commander_dawnforgeAI(Creature* creature) : ScriptedAI(creature) { } + npc_commander_dawnforgeAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + PlayerGUID.Clear(); + ardonisGUID.Clear(); + pathaleonGUID.Clear(); + + Phase = 1; + PhaseSubphase = 0; + Phase_Timer = 4000; + isEvent = false; + } ObjectGuid PlayerGUID; ObjectGuid ardonisGUID; @@ -94,14 +109,7 @@ public: void Reset() override { - PlayerGUID.Clear(); - ardonisGUID.Clear(); - pathaleonGUID.Clear(); - - Phase = 1; - PhaseSubphase = 0; - Phase_Timer = 4000; - isEvent = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -623,15 +631,23 @@ public: struct npc_maxx_a_million_escortAI : public npc_escortAI { - npc_maxx_a_million_escortAI(Creature* creature) : npc_escortAI(creature) { } + npc_maxx_a_million_escortAI(Creature* creature) : npc_escortAI(creature) + { + Initialize(); + } + + void Initialize() + { + bTake = false; + uiTakeTimer = 3000; + } bool bTake; uint32 uiTakeTimer; void Reset() override { - bTake=false; - uiTakeTimer=3000; + Initialize(); } void WaypointReached(uint32 waypointId) override diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 9eba6fdef0b..a96cf3ac254 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -1026,13 +1026,21 @@ public: struct npc_earthmender_wildaAI : public npc_escortAI { - npc_earthmender_wildaAI(Creature* creature) : npc_escortAI(creature) { } + npc_earthmender_wildaAI(Creature* creature) : npc_escortAI(creature) + { + Initialize(); + } + + void Initialize() + { + m_uiHealingTimer = 0; + } uint32 m_uiHealingTimer; void Reset() override { - m_uiHealingTimer = 0; + Initialize(); } void WaypointReached(uint32 waypointId) override @@ -1411,7 +1419,24 @@ public: struct npc_lord_illidan_stormrageAI : public ScriptedAI { - npc_lord_illidan_stormrageAI(Creature* creature) : ScriptedAI(creature) { } + npc_lord_illidan_stormrageAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + PlayerGUID.Clear(); + + WaveTimer = 10000; + AnnounceTimer = 7000; + LiveCount = 0; + WaveCount = 0; + + EventStarted = false; + Announced = false; + Failed = false; + } ObjectGuid PlayerGUID; @@ -1427,16 +1452,7 @@ public: void Reset() override { - PlayerGUID.Clear(); - - WaveTimer = 10000; - AnnounceTimer = 7000; - LiveCount = 0; - WaveCount = 0; - - EventStarted = false; - Announced = false; - Failed = false; + Initialize(); me->SetVisible(false); } |