diff options
author | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-09-04 06:41:51 +0200 |
---|---|---|
committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-09-04 06:41:51 +0200 |
commit | ecb317c3006181611dac01554560f15f265aa0e9 (patch) | |
tree | 9f68584ccac553a219eaee65d4dd9f064a7f0ecc /src | |
parent | d7dfef900fff2f52f34fb32a7854475786d34158 (diff) | |
parent | d4049e62a3b915867e9668a82402b7e7f2389b9f (diff) |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts:
src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp
src/server/scripts/EasternKingdoms/zone_hinterlands.cpp
src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp
src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp
src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp
Diffstat (limited to 'src')
41 files changed, 767 insertions, 359 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 58e82bfcbbf..8e2d7cbf886 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2227,6 +2227,64 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u sGameEventMgr->StartEvent(eventId, true); break; } + case SMART_ACTION_START_CLOSEST_WAYPOINT: + { + uint32 waypoints[SMART_ACTION_PARAM_COUNT]; + waypoints[0] = e.action.closestWaypointFromList.wp1; + waypoints[1] = e.action.closestWaypointFromList.wp2; + waypoints[2] = e.action.closestWaypointFromList.wp3; + waypoints[3] = e.action.closestWaypointFromList.wp4; + waypoints[4] = e.action.closestWaypointFromList.wp5; + waypoints[5] = e.action.closestWaypointFromList.wp6; + float distanceToClosest = std::numeric_limits<float>::max(); + WayPoint* closestWp = NULL; + + ObjectList* targets = GetTargets(e, unit); + if (targets) + { + for (ObjectList::iterator itr = targets->begin(); itr != targets->end(); ++itr) + { + if (Creature* target = (*itr)->ToCreature()) + { + if (IsSmart(target)) + { + for (uint8 i = 0; i < SMART_ACTION_PARAM_COUNT; i++) + { + if (!waypoints[i]) + continue; + + WPPath* path = sSmartWaypointMgr->GetPath(waypoints[i]); + + if (!path || path->empty()) + continue; + + WPPath::const_iterator itrWp = path->find(0); + + if (itrWp != path->end()) + { + if (WayPoint* wp = itrWp->second) + { + float distToThisPath = target->GetDistance(wp->x, wp->y, wp->z); + + if (distToThisPath < distanceToClosest) + { + distanceToClosest = distToThisPath; + closestWp = wp; + } + } + } + } + + if (closestWp) + CAST_AI(SmartAI, target->AI())->StartPath(false, closestWp->id, true); + } + } + } + + delete targets; + } + break; + } default: TC_LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry %d SourceType %u, Event %u, Unhandled Action type %u", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index af24298c60d..7831594016a 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1046,6 +1046,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) } break; } + case SMART_ACTION_START_CLOSEST_WAYPOINT: case SMART_ACTION_FOLLOW: case SMART_ACTION_SET_ORIENTATION: case SMART_ACTION_STORE_TARGET_LIST: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index bff2e903f37..e3c4e644751 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -530,8 +530,9 @@ enum SMART_ACTION SMART_ACTION_REMOVE_POWER = 110, // PowerType, newPower SMART_ACTION_GAME_EVENT_STOP = 111, // GameEventId SMART_ACTION_GAME_EVENT_START = 112, // GameEventId + SMART_ACTION_START_CLOSEST_WAYPOINT = 113, // wp1, wp2, wp3, wp4, wp5, wp6, wp7 - SMART_ACTION_END = 113 + SMART_ACTION_END = 114 }; struct SmartAction @@ -995,6 +996,16 @@ struct SmartAction uint32 id; } gameEventStart; + struct + { + uint32 wp1; + uint32 wp2; + uint32 wp3; + uint32 wp4; + uint32 wp5; + uint32 wp6; + } closestWaypointFromList; + //! Note for any new future actions //! All parameters must have type uint32 diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp index 08e3de1941a..ee624c4f6a5 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp @@ -389,7 +389,16 @@ public: struct npc_scarlet_courierAI : public ScriptedAI { - npc_scarlet_courierAI(Creature* creature) : ScriptedAI(creature) { } + npc_scarlet_courierAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + uiStage = 1; + uiStage_timer = 3000; + } uint32 uiStage; uint32 uiStage_timer; @@ -397,8 +406,7 @@ public: void Reset() override { me->Mount(14338); // not sure about this id - uiStage = 1; - uiStage_timer = 3000; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index e202e55e675..f6757afd5bc 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -312,6 +312,8 @@ public: npc_highlord_darion_mograineAI(Creature* creature) : npc_escortAI(creature) { uiTirionGUID = 0; + uiAlexandrosGUID = 0; + uiDarionGUID = 0; uiKorfaxGUID = 0; uiMaxwellGUID = 0; uiEligorGUID = 0; diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp index cad51dd55e0..efba7040b76 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp @@ -46,7 +46,19 @@ public: struct npc_valkyr_battle_maidenAI : public PassiveAI { - npc_valkyr_battle_maidenAI(Creature* creature) : PassiveAI(creature) { } + npc_valkyr_battle_maidenAI(Creature* creature) : PassiveAI(creature) + { + Initialize(); + } + + void Initialize() + { + FlyBackTimer = 500; + phase = 0; + x = 0.f; + y = 0.f; + z = 0.f; + } uint32 FlyBackTimer; float x, y, z; @@ -58,8 +70,6 @@ public: me->SetVisible(false); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetCanFly(true); - FlyBackTimer = 500; - phase = 0; me->GetPosition(x, y, z); z += 4.0f; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index cad46b84748..307bcd5add6 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -232,7 +232,20 @@ public: struct npc_headAI : public ScriptedAI { - npc_headAI(Creature* creature) : ScriptedAI(creature) { } + npc_headAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Phase = 0; + bodyGUID = 0; + die = false; + withbody = true; + wait = 1000; + laugh = urand(15000, 30000); + } uint64 bodyGUID; @@ -245,12 +258,7 @@ public: void Reset() override { - Phase = 0; - bodyGUID = 0; - die = false; - withbody = true; - wait = 1000; - laugh = urand(15000, 30000); + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -380,10 +388,29 @@ public: { boss_headless_horsemanAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); headGUID = 0; } + void Initialize() + { + Phase = 1; + conflagrate = 15000; + summonadds = 15000; + laugh = urand(16000, 20000); + cleave = 2000; + regen = 1000; + burn = 6000; + count = 0; + say_timer = 3000; + + withhead = true; + returned = true; + burned = false; + IsFlying = false; + } + InstanceScript* instance; uint64 headGUID; @@ -410,20 +437,7 @@ public: void Reset() override { - Phase = 1; - conflagrate = 15000; - summonadds = 15000; - laugh = urand(16000, 20000); - cleave = 2000; - regen = 1000; - burn = 6000; - count = 0; - say_timer = 3000; - - withhead = true; - returned = true; - burned = false; - IsFlying = false; + Initialize(); DoCast(me, SPELL_HEAD); if (headGUID) { diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp index a4a3660b360..78a317b216e 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp @@ -51,9 +51,21 @@ public: { boss_high_inquisitor_fairbanksAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + CurseOfBlood_Timer = 10000; + DispelMagic_Timer = 30000; + Fear_Timer = 40000; + Heal_Timer = 30000; + Sleep_Timer = 30000; + Dispel_Timer = 20000; + PowerWordShield = false; + } + uint32 CurseOfBlood_Timer; uint32 DispelMagic_Timer; uint32 Fear_Timer; @@ -65,13 +77,7 @@ public: void Reset() override { - CurseOfBlood_Timer = 10000; - DispelMagic_Timer = 30000; - Fear_Timer = 40000; - Heal_Timer = 30000; - Sleep_Timer = 30000; - Dispel_Timer = 20000; - PowerWordShield = false; + Initialize(); me->SetStandState(UNIT_STAND_STATE_DEAD); me->SetUInt32Value(UNIT_FIELD_BYTES_1, 7); instance->SetBossState(DATA_HIGH_INQUISITOR_FAIRBANKS, NOT_STARTED); diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp index a73cf946a7c..c05de1bb800 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp @@ -55,9 +55,17 @@ public: { boss_interrogator_vishasAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = me->GetInstanceScript(); } + void Initialize() + { + ShadowWordPain_Timer = 5000; + Yell60 = false; + Yell30 = false; + } + InstanceScript* instance; bool Yell30; @@ -66,9 +74,7 @@ public: void Reset() override { - ShadowWordPain_Timer = 5000; - Yell60 = false; - Yell30 = false; + Initialize(); instance->SetBossState(DATA_INTERROGATOR_VISHAS, NOT_STARTED); } diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp index a9988584edd..02f7c815414 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp @@ -72,9 +72,19 @@ public: { boss_scarlet_commander_mograineAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + CrusaderStrike_Timer = 10000; + HammerOfJustice_Timer = 10000; + _bHasDied = false; + _bHeal = false; + _bFakeDeath = false; + } + InstanceScript* instance; uint32 CrusaderStrike_Timer; @@ -86,8 +96,7 @@ public: void Reset() override { - CrusaderStrike_Timer = 10000; - HammerOfJustice_Timer = 10000; + Initialize(); //Incase wipe during phase that mograine fake death me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -96,10 +105,6 @@ public: if (me->IsAlive()) instance->SetBossState(DATA_MOGRAINE_AND_WHITE_EVENT, NOT_STARTED); - - _bHasDied = false; - _bHeal = false; - _bFakeDeath = false; } void JustReachedHome() override @@ -230,9 +235,21 @@ public: { boss_high_inquisitor_whitemaneAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + Wait_Timer = 7000; + Heal_Timer = 10000; + PowerWordShield_Timer = 15000; + HolySmite_Timer = 6000; + + _bCanResurrectCheck = false; + _bCanResurrect = false; + } + InstanceScript* instance; uint32 Heal_Timer; @@ -245,13 +262,7 @@ public: void Reset() override { - Wait_Timer = 7000; - Heal_Timer = 10000; - PowerWordShield_Timer = 15000; - HolySmite_Timer = 6000; - - _bCanResurrectCheck = false; - _bCanResurrect = false; + Initialize(); if (me->IsAlive()) instance->SetBossState(DATA_MOGRAINE_AND_WHITE_EVENT, NOT_STARTED); diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp index 84ada04a989..4a9703b509b 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp @@ -50,7 +50,16 @@ class boss_instructor_malicia : public CreatureScript struct boss_instructormaliciaAI : public BossAI { - boss_instructormaliciaAI(Creature* creature) : BossAI(creature, DATA_INSTRUCTORMALICIA) { } + boss_instructormaliciaAI(Creature* creature) : BossAI(creature, DATA_INSTRUCTORMALICIA) + { + Initialize(); + } + + void Initialize() + { + FlashCounter = 0; + TouchCounter = 0; + } uint32 FlashCounter; uint32 TouchCounter; @@ -58,8 +67,7 @@ class boss_instructor_malicia : public CreatureScript void Reset() override { _Reset(); - FlashCounter = 0; - TouchCounter = 0; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp index 57331d84b82..02c0f70b7c8 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp @@ -47,7 +47,18 @@ public: struct boss_jandicebarovAI : public ScriptedAI { - boss_jandicebarovAI(Creature* creature) : ScriptedAI(creature) { } + boss_jandicebarovAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + CurseOfBlood_Timer = 15000; + Illusion_Timer = 30000; + Invisible_Timer = 3000; //Too much too low? + Invisible = false; + } uint32 CurseOfBlood_Timer; uint32 Illusion_Timer; @@ -57,10 +68,7 @@ public: void Reset() override { - CurseOfBlood_Timer = 15000; - Illusion_Timer = 30000; - Invisible_Timer = 3000; //Too much too low? - Invisible = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override @@ -169,13 +177,21 @@ public: struct npc_illusionofjandicebarovAI : public ScriptedAI { - npc_illusionofjandicebarovAI(Creature* creature) : ScriptedAI(creature) { } + npc_illusionofjandicebarovAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Cleave_Timer = urand(2000, 8000); + } uint32 Cleave_Timer; void Reset() override { - Cleave_Timer = urand(2000, 8000); + Initialize(); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true); } diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp index b88954bd1b7..3864c598459 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp @@ -44,7 +44,19 @@ public: struct boss_kormokAI : public ScriptedAI { - boss_kormokAI(Creature* creature) : ScriptedAI(creature) { } + boss_kormokAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + ShadowVolley_Timer = 10000; + BoneShield_Timer = 2000; + Minion_Timer = 15000; + Mage_Timer = 0; + Mages = false; + } uint32 ShadowVolley_Timer; uint32 BoneShield_Timer; @@ -54,11 +66,7 @@ public: void Reset() override { - ShadowVolley_Timer = 10000; - BoneShield_Timer = 2000; - Minion_Timer = 15000; - Mage_Timer = 0; - Mages = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp index 2aecc8bd491..9351224863c 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp @@ -48,7 +48,20 @@ public: struct boss_rasfrostAI : public ScriptedAI { - boss_rasfrostAI(Creature* creature) : ScriptedAI(creature) { } + boss_rasfrostAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + IceArmor_Timer = 2000; + Frostbolt_Timer = 8000; + ChillNova_Timer = 12000; + Freeze_Timer = 18000; + FrostVolley_Timer = 24000; + Fear_Timer = 45000; + } uint32 IceArmor_Timer; uint32 Frostbolt_Timer; @@ -59,12 +72,7 @@ public: void Reset() override { - IceArmor_Timer = 2000; - Frostbolt_Timer = 8000; - ChillNova_Timer = 12000; - Freeze_Timer = 18000; - FrostVolley_Timer = 24000; - Fear_Timer = 45000; + Initialize(); DoCast(me, SPELL_ICEARMOR, true); } diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp index c111eb103b4..fba5f3faa14 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp @@ -51,7 +51,17 @@ public: struct boss_vectusAI : public ScriptedAI { - boss_vectusAI(Creature* creature) : ScriptedAI(creature) { } + boss_vectusAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + m_uiFireShield_Timer = 2000; + m_uiBlastWave_Timer = 14000; + m_uiFrenzy_Timer = 0; + } uint32 m_uiFireShield_Timer; uint32 m_uiBlastWave_Timer; @@ -59,9 +69,7 @@ public: void Reset() override { - m_uiFireShield_Timer = 2000; - m_uiBlastWave_Timer = 14000; - m_uiFrenzy_Timer = 0; + Initialize(); } void UpdateAI(uint32 uiDiff) override diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp index fb839650b86..a6e77a234c6 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp @@ -164,16 +164,22 @@ public: { npc_arugal_voidwalkerAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiDarkOffering = urand(200, 1000); + } + InstanceScript* instance; uint32 uiDarkOffering; void Reset() override { - uiDarkOffering = urand(200, 1000); + Initialize(); } void UpdateAI(uint32 uiDiff) override diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp index de54e87fc97..85f5b51b52e 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp @@ -75,9 +75,19 @@ public: { boss_baron_rivendareAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = me->GetInstanceScript(); } + void Initialize() + { + ShadowBolt_Timer = 5000; + Cleave_Timer = 8000; + MortalStrike_Timer = 12000; + // RaiseDead_Timer = 30000; + SummonSkeletons_Timer = 34000; + } + InstanceScript* instance; uint32 ShadowBolt_Timer; @@ -88,11 +98,7 @@ public: void Reset() override { - ShadowBolt_Timer = 5000; - Cleave_Timer = 8000; - MortalStrike_Timer = 12000; - // RaiseDead_Timer = 30000; - SummonSkeletons_Timer = 34000; + Initialize(); if (instance->GetData(TYPE_RAMSTEIN) == DONE) instance->SetData(TYPE_BARON, NOT_STARTED); } diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp index a3eb66ac23c..fa8f0f39563 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp @@ -49,9 +49,18 @@ public: { boss_baroness_anastariAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = me->GetInstanceScript(); } + void Initialize() + { + BansheeWail_Timer = 1000; + BansheeCurse_Timer = 11000; + Silence_Timer = 13000; + //Possess_Timer = 35000; + } + InstanceScript* instance; uint32 BansheeWail_Timer; @@ -61,10 +70,7 @@ public: void Reset() override { - BansheeWail_Timer = 1000; - BansheeCurse_Timer = 11000; - Silence_Timer = 13000; - //Possess_Timer = 35000; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp index 14d2a9a9f26..063081021fd 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp @@ -92,7 +92,18 @@ public: struct boss_cannon_master_willeyAI : public ScriptedAI { - boss_cannon_master_willeyAI(Creature* creature) : ScriptedAI(creature) { } + boss_cannon_master_willeyAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Shoot_Timer = 1000; + Pummel_Timer = 7000; + KnockAway_Timer = 11000; + SummonRifleman_Timer = 15000; + } uint32 KnockAway_Timer; uint32 Pummel_Timer; @@ -101,10 +112,7 @@ public: void Reset() override { - Shoot_Timer = 1000; - Pummel_Timer = 7000; - KnockAway_Timer = 11000; - SummonRifleman_Timer = 15000; + Initialize(); } void JustDied(Unit* /*killer*/) override diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp index f0a8c5c418f..1c7af67190f 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp @@ -81,7 +81,23 @@ public: struct boss_dathrohan_balnazzarAI : public ScriptedAI { - boss_dathrohan_balnazzarAI(Creature* creature) : ScriptedAI(creature) { } + boss_dathrohan_balnazzarAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + m_uiCrusadersHammer_Timer = 8000; + m_uiCrusaderStrike_Timer = 12000; + m_uiMindBlast_Timer = 6000; + m_uiHolyStrike_Timer = 18000; + m_uiShadowShock_Timer = 4000; + m_uiPsychicScream_Timer = 16000; + m_uiDeepSleep_Timer = 20000; + m_uiMindControl_Timer = 10000; + m_bTransformed = false; + } uint32 m_uiCrusadersHammer_Timer; uint32 m_uiCrusaderStrike_Timer; @@ -95,15 +111,7 @@ public: void Reset() override { - m_uiCrusadersHammer_Timer = 8000; - m_uiCrusaderStrike_Timer = 12000; - m_uiMindBlast_Timer = 6000; - m_uiHolyStrike_Timer = 18000; - m_uiShadowShock_Timer = 4000; - m_uiPsychicScream_Timer = 16000; - m_uiDeepSleep_Timer = 20000; - m_uiMindControl_Timer = 10000; - m_bTransformed = false; + Initialize(); if (me->GetEntry() == NPC_BALNAZZAR) me->UpdateEntry(NPC_DATHROHAN); diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp index 8b6f2da87e4..ddd51320b1c 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp @@ -53,7 +53,19 @@ public: struct boss_magistrate_barthilasAI : public ScriptedAI { - boss_magistrate_barthilasAI(Creature* creature) : ScriptedAI(creature) { } + boss_magistrate_barthilasAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + DrainingBlow_Timer = 20000; + CrowdPummel_Timer = 15000; + MightyBlow_Timer = 10000; + FuriousAnger_Timer = 5000; + AngerCount = 0; + } uint32 DrainingBlow_Timer; uint32 CrowdPummel_Timer; @@ -63,11 +75,7 @@ public: void Reset() override { - DrainingBlow_Timer = 20000; - CrowdPummel_Timer = 15000; - MightyBlow_Timer = 10000; - FuriousAnger_Timer = 5000; - AngerCount = 0; + Initialize(); if (me->IsAlive()) me->SetDisplayId(MODEL_NORMAL); diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp index b3fae9821aa..68193ffd0c2 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp @@ -50,9 +50,17 @@ public: { boss_maleki_the_pallidAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = me->GetInstanceScript(); } + void Initialize() + { + Frostbolt_Timer = 1000; + IceTomb_Timer = 16000; + DrainLife_Timer = 31000; + } + InstanceScript* instance; uint32 Frostbolt_Timer; @@ -61,9 +69,7 @@ public: void Reset() override { - Frostbolt_Timer = 1000; - IceTomb_Timer = 16000; - DrainLife_Timer = 31000; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp index 1b5127a5e1c..1d3e28946be 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp @@ -49,9 +49,18 @@ public: { boss_nerubenkanAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = me->GetInstanceScript(); } + void Initialize() + { + CryptScarabs_Timer = 3000; + EncasingWebs_Timer = 7000; + PierceArmor_Timer = 19000; + RaiseUndeadScarab_Timer = 3000; + } + InstanceScript* instance; uint32 EncasingWebs_Timer; @@ -61,10 +70,7 @@ public: void Reset() override { - CryptScarabs_Timer = 3000; - EncasingWebs_Timer = 7000; - PierceArmor_Timer = 19000; - RaiseUndeadScarab_Timer = 3000; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp index dfc3e570e1b..0a09bc85ea3 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp @@ -65,9 +65,16 @@ public: { boss_silver_hand_bossesAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + HolyLight_Timer = 20000; + DivineShield_Timer = 20000; + } + InstanceScript* instance; uint32 HolyLight_Timer; @@ -75,8 +82,7 @@ public: void Reset() override { - HolyLight_Timer = 20000; - DivineShield_Timer = 20000; + Initialize(); switch (me->GetEntry()) { diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp index df9b6a04af4..531a4f3887a 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp @@ -52,9 +52,16 @@ public: { boss_ramstein_the_gorgerAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = me->GetInstanceScript(); } + void Initialize() + { + Trample_Timer = 3000; + Knockout_Timer = 12000; + } + InstanceScript* instance; uint32 Trample_Timer; @@ -62,8 +69,7 @@ public: void Reset() override { - Trample_Timer = 3000; - Knockout_Timer = 12000; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp index a45b3594da0..f721fca8aab 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp @@ -48,15 +48,23 @@ public: struct boss_timmy_the_cruelAI : public ScriptedAI { - boss_timmy_the_cruelAI(Creature* creature) : ScriptedAI(creature) { } + boss_timmy_the_cruelAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + RavenousClaw_Timer = 10000; + HasYelled = false; + } uint32 RavenousClaw_Timer; bool HasYelled; void Reset() override { - RavenousClaw_Timer = 10000; - HasYelled = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp index 4109328afda..01ee7139ae5 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp @@ -142,7 +142,17 @@ public: struct npc_restless_soulAI : public ScriptedAI { - npc_restless_soulAI(Creature* creature) : ScriptedAI(creature) { } + npc_restless_soulAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Tagger = 0; + Die_Timer = 5000; + Tagged = false; + } uint64 Tagger; uint32 Die_Timer; @@ -150,9 +160,7 @@ public: void Reset() override { - Tagger = 0; - Die_Timer = 5000; - Tagged = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -224,15 +232,23 @@ public: struct npc_spectral_ghostly_citizenAI : public ScriptedAI { - npc_spectral_ghostly_citizenAI(Creature* creature) : ScriptedAI(creature) { } + npc_spectral_ghostly_citizenAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Die_Timer = 5000; + Tagged = false; + } uint32 Die_Timer; bool Tagged; void Reset() override { - Die_Timer = 5000; - Tagged = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index eb9b6c2a1df..4e401be7df3 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -70,10 +70,26 @@ public: { boss_brutallusAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); Intro = true; } + void Initialize() + { + SlashTimer = 11000; + StompTimer = 30000; + BurnTimer = 60000; + BerserkTimer = 360000; + + IntroPhase = 0; + IntroPhaseTimer = 0; + IntroFrostBoltTimer = 0; + + IsIntro = false; + Enraged = false; + } + InstanceScript* instance; uint32 SlashTimer; @@ -91,17 +107,7 @@ public: void Reset() override { - SlashTimer = 11000; - StompTimer = 30000; - BurnTimer = 60000; - BerserkTimer = 360000; - - IntroPhase = 0; - IntroPhaseTimer = 0; - IntroFrostBoltTimer = 0; - - IsIntro = false; - Enraged = false; + Initialize(); DoCast(me, SPELL_DUAL_WIELD, true); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp index 3701d37ed7f..d2382cda37d 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp @@ -82,9 +82,22 @@ public: { boss_sacrolashAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + ShadowbladesTimer = 10000; + ShadownovaTimer = 30000; + ConfoundingblowTimer = 25000; + ShadowimageTimer = 20000; + ConflagrationTimer = 30000; + EnrageTimer = 360000; + SisterDeath = false; + Enraged = false; + } + InstanceScript* instance; bool SisterDeath; @@ -111,13 +124,7 @@ public: if (!me->IsInCombat()) { - ShadowbladesTimer = 10000; - ShadownovaTimer = 30000; - ConfoundingblowTimer = 25000; - ShadowimageTimer = 20000; - ConflagrationTimer = 30000; - EnrageTimer = 360000; - SisterDeath = false; + Initialize(); } instance->SetBossState(DATA_EREDAR_TWINS, NOT_STARTED); @@ -319,12 +326,27 @@ public: { boss_alythessAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); SetCombatMovement(false); instance = creature->GetInstanceScript(); IntroStepCounter = 10; } + void Initialize() + { + ConflagrationTimer = 45000; + BlazeTimer = 100; + PyrogenicsTimer = 15000; + ShadownovaTimer = 40000; + EnrageTimer = 360000; + FlamesearTimer = 15000; + IntroYellTimer = 10000; + + SisterDeath = false; + Enraged = false; + } + InstanceScript* instance; bool SisterDeath; @@ -354,15 +376,7 @@ public: if (!me->IsInCombat()) { - ConflagrationTimer = 45000; - BlazeTimer = 100; - PyrogenicsTimer = 15000; - ShadownovaTimer = 40000; - EnrageTimer = 360000; - FlamesearTimer = 15000; - IntroYellTimer = 10000; - - SisterDeath = false; + Initialize(); } instance->SetBossState(DATA_EREDAR_TWINS, NOT_STARTED); @@ -635,7 +649,17 @@ public: struct npc_shadow_imageAI : public ScriptedAI { - npc_shadow_imageAI(Creature* creature) : ScriptedAI(creature) { } + npc_shadow_imageAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + ShadowfuryTimer = 5000 + (rand32() % 15000); + DarkstrikeTimer = 3000; + KillTimer = 15000; + } uint32 ShadowfuryTimer; uint32 KillTimer; @@ -644,9 +668,7 @@ public: void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - ShadowfuryTimer = 5000 + (rand32() % 15000); - DarkstrikeTimer = 3000; - KillTimer = 15000; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index 120d3a0b231..4b17f698553 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -116,7 +116,17 @@ public: { boss_felmystAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); + uiBreathCount = 0; + breathX = 0.f; + breathY = 0.f; + } + + void Initialize() + { + phase = PHASE_NONE; + uiFlightCount = 0; } InstanceScript* instance; @@ -130,12 +140,10 @@ public: void Reset() override { - phase = PHASE_NONE; + Initialize(); events.Reset(); - uiFlightCount = 0; - me->SetDisableGravity(true); me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10); me->SetFloatValue(UNIT_FIELD_COMBATREACH, 10); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp index b7e03fe0459..3284febb9f3 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -107,13 +107,30 @@ public: { boss_kalecgosAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); - SathGUID = 0; - DoorGUID = 0; bJustReset = false; me->setActive(true); } + void Initialize() + { + SathGUID = 0; + ArcaneBuffetTimer = 8000; + FrostBreathTimer = 15000; + WildMagicTimer = 10000; + TailLashTimer = 25000; + SpectralBlastTimer = urand(20000, 25000); + CheckTimer = 1000; + ResetTimer = 30000; + + TalkTimer = 0; + TalkSequence = 0; + isFriendly = false; + isEnraged = false; + isBanished = false; + } + InstanceScript* instance; uint32 ArcaneBuffetTimer; @@ -132,7 +149,6 @@ public: bool bJustReset; uint64 SathGUID; - uint64 DoorGUID; void Reset() override { @@ -151,19 +167,6 @@ public: me->SetStandState(UNIT_STAND_STATE_SLEEP); } me->SetFullHealth(); //dunno why it does not resets health at evade.. - ArcaneBuffetTimer = 8000; - FrostBreathTimer = 15000; - WildMagicTimer = 10000; - TailLashTimer = 25000; - SpectralBlastTimer = urand(20000, 25000); - CheckTimer = 1000; - ResetTimer = 30000; - - TalkTimer = 0; - TalkSequence = 0; - isFriendly = false; - isEnraged = false; - isBanished = false; } void EnterEvadeMode() override @@ -459,13 +462,13 @@ public: boss_kalecAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); + SathGUID = 0; } - void Reset() override + void Initialize() { - SathGUID = instance->GetData64(DATA_SATHROVARR); - RevitalizeTimer = 5000; HeroicStrikeTimer = 3000; YellTimer = 5000; @@ -474,6 +477,13 @@ public: isEnraged = false; } + void Reset() override + { + SathGUID = instance->GetData64(DATA_SATHROVARR); + + Initialize(); + } + void DamageTaken(Unit* done_by, uint32 &damage) override { if (done_by->GetGUID() != SathGUID) @@ -581,11 +591,23 @@ public: { boss_sathrovarrAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); KalecGUID = 0; KalecgosGUID = 0; } + void Initialize() + { + ShadowBoltTimer = urand(7, 10) * 1000; + AgonyCurseTimer = 20000; + CorruptionStrikeTimer = 13000; + CheckTimer = 1000; + ResetThreat = 1000; + isEnraged = false; + isBanished = false; + } + InstanceScript* instance; uint32 CorruptionStrikeTimer; @@ -613,13 +635,7 @@ public: KalecGUID = 0; } - ShadowBoltTimer = urand(7, 10) * 1000; - AgonyCurseTimer = 20000; - CorruptionStrikeTimer = 13000; - CheckTimer = 1000; - ResetThreat = 1000; - isEnraged = false; - isBanished = false; + Initialize(); me->CastSpell(me, AURA_DEMONIC_VISUAL, true); TeleportAllPlayersBack(); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index 1f66f834b28..5df2d683e21 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -243,17 +243,23 @@ public: { boss_kalecgos_kjAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + OrbsEmpowered = 0; + EmpowerCount = 0; + } + InstanceScript* instance; uint8 OrbsEmpowered; uint8 EmpowerCount; void Reset() override { - OrbsEmpowered = 0; - EmpowerCount = 0; + Initialize(); me->SetDisableGravity(true); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->setActive(true); @@ -393,11 +399,21 @@ public: { npc_kiljaeden_controllerAI(Creature* creature) : ScriptedAI(creature), summons(me) { + Initialize(); instance = creature->GetInstanceScript(); SetCombatMovement(false); } + void Initialize() + { + phase = PHASE_DECEIVERS; + deceiverDeathCount = 0; + bSummonedDeceivers = false; + bKiljaedenDeath = false; + uiRandomSayTimer = 30000; + } + InstanceScript* instance; SummonList summons; @@ -419,14 +435,10 @@ public: void Reset() override { - phase = PHASE_DECEIVERS; + Initialize(); if (Creature* pKalecKJ = ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_KALECGOS_KJ))) ENSURE_AI(boss_kalecgos_kj::boss_kalecgos_kjAI, pKalecKJ->AI())->ResetOrbs(); - deceiverDeathCount = 0; - bSummonedDeceivers = false; - bKiljaedenDeath = false; - uiRandomSayTimer = 30000; summons.DespawnAll(); } @@ -489,11 +501,47 @@ public: { boss_kiljaedenAI(Creature* creature) : ScriptedAI(creature), summons(me) { + Initialize(); instance = creature->GetInstanceScript(); SetCombatMovement(false); } + void Initialize() + { + TimerIsDeactivated[TIMER_SPEECH] = false; + Timer[TIMER_SPEECH] = 0; + + //Phase 2 Timer + Timer[TIMER_SOUL_FLAY] = 11000; + Timer[TIMER_LEGION_LIGHTNING] = 30000; + Timer[TIMER_FIRE_BLOOM] = 20000; + Timer[TIMER_SUMMON_SHILEDORB] = 35000; + + //Phase 3 Timer + Timer[TIMER_SHADOW_SPIKE] = 4000; + Timer[TIMER_FLAME_DART] = 3000; + Timer[TIMER_DARKNESS] = 45000; + Timer[TIMER_ORBS_EMPOWER] = 35000; + + //Phase 4 Timer + Timer[TIMER_ARMAGEDDON] = 2000; + + ActiveTimers = 5; + WaitTimer = 0; + speechCount = 0; + SpeechTimer = 0; + + Phase = PHASE_NORMAL; + + IsInDarkness = false; + IsWaiting = false; + OrbActivated = false; + SpeechBegins = true; + + ChangeTimers(false, 0); + } + InstanceScript* instance; SummonList summons; @@ -520,41 +568,12 @@ public: void Reset() override { - TimerIsDeactivated[TIMER_SPEECH] = false; - Timer[TIMER_SPEECH] = 0; - - //Phase 2 Timer - Timer[TIMER_SOUL_FLAY] = 11000; - Timer[TIMER_LEGION_LIGHTNING] = 30000; - Timer[TIMER_FIRE_BLOOM] = 20000; - Timer[TIMER_SUMMON_SHILEDORB] = 35000; - - //Phase 3 Timer - Timer[TIMER_SHADOW_SPIKE] = 4000; - Timer[TIMER_FLAME_DART] = 3000; - Timer[TIMER_DARKNESS] = 45000; - Timer[TIMER_ORBS_EMPOWER] = 35000; - - //Phase 4 Timer - Timer[TIMER_ARMAGEDDON] = 2000; - - ActiveTimers = 5; - WaitTimer = 0; - speechCount = 0; - SpeechTimer = 0; - - Phase = PHASE_NORMAL; - - IsInDarkness = false; - IsWaiting = false; - OrbActivated = false; - SpeechBegins = true; + Initialize(); if (Creature* pKalec = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KALECGOS_KJ))) pKalec->RemoveDynObject(SPELL_RING_OF_BLUE_FLAMES); me->SetFloatValue(UNIT_FIELD_COMBATREACH, 12); - ChangeTimers(false, 0); summons.DespawnAll(); } @@ -890,9 +909,17 @@ public: { npc_hand_of_the_deceiverAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + /// @todo Timers! + ShadowBoltVolleyTimer = urand(8000, 14000); // So they don't all cast it in the same moment. + FelfirePortalTimer = 20000; + } + InstanceScript* instance; uint32 ShadowBoltVolleyTimer; @@ -900,9 +927,7 @@ public: void Reset() override { - /// @todo Timers! - ShadowBoltVolleyTimer = urand(8000, 14000); // So they don't all cast it in the same moment. - FelfirePortalTimer = 20000; + Initialize(); instance->SetBossState(DATA_KILJAEDEN, NOT_STARTED); } @@ -989,14 +1014,20 @@ public: { npc_felfire_portalAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); SetCombatMovement(false); } + void Initialize() + { + uiSpawnFiendTimer = 5000; + } + uint32 uiSpawnFiendTimer; void Reset() override { - uiSpawnFiendTimer = 5000; + Initialize(); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_NON_ATTACKABLE); } @@ -1034,7 +1065,16 @@ public: struct npc_volatile_felfire_fiendAI : public ScriptedAI { - npc_volatile_felfire_fiendAI(Creature* creature) : ScriptedAI(creature) { } + npc_volatile_felfire_fiendAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + uiExplodeTimer = 2000; + bLockedTarget = false; + } uint32 uiExplodeTimer; @@ -1042,8 +1082,7 @@ public: void Reset() override { - uiExplodeTimer = 2000; - bLockedTarget = false; + Initialize(); } void DamageTaken(Unit* /*done_by*/, uint32 &damage) override @@ -1093,16 +1132,22 @@ public: { npc_armageddonAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); SetCombatMovement(false); } + void Initialize() + { + spell = 0; + uiTimer = 0; + } + uint8 spell; uint32 uiTimer; void Reset() override { - spell = 0; - uiTimer = 0; + Initialize(); } void UpdateAI(uint32 diff) override @@ -1150,7 +1195,22 @@ public: { npc_shield_orbAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); + x = 0.f; + y = 0.f; + } + + void Initialize() + { + bPointReached = true; + uiTimer = urand(500, 1000); + uiCheckTimer = 1000; + r = 17; + c = 0; + mx = ShieldOrbLocations[0][0]; + my = ShieldOrbLocations[0][1]; + bClockwise = roll_chance_i(50); } InstanceScript* instance; @@ -1164,14 +1224,7 @@ public: void Reset() override { me->SetDisableGravity(true); - bPointReached = true; - uiTimer = urand(500, 1000); - uiCheckTimer = 1000; - r = 17; - c = 0; - mx = ShieldOrbLocations[0][0]; - my = ShieldOrbLocations[0][1]; - bClockwise = roll_chance_i(50); + Initialize(); } void UpdateAI(uint32 diff) override @@ -1235,12 +1288,12 @@ public: struct npc_sinster_reflectionAI : public ScriptedAI { - npc_sinster_reflectionAI(Creature* creature) : ScriptedAI(creature) { } - - uint8 victimClass; - uint32 uiTimer[3]; + npc_sinster_reflectionAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { uiTimer[0] = 0; uiTimer[1] = 0; @@ -1248,6 +1301,14 @@ public: victimClass = 0; } + uint8 victimClass; + uint32 uiTimer[3]; + + void Reset() override + { + Initialize(); + } + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp index f06dc247883..f82d71901ac 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp @@ -64,9 +64,21 @@ class boss_archaedas : public CreatureScript { boss_archaedasAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = me->GetInstanceScript(); } + void Initialize() + { + uiTremorTimer = 60000; + iAwakenTimer = 0; + uiWallMinionTimer = 10000; + + bWakingUp = false; + bGuardiansAwake = false; + bVaultWalkersAwake = false; + } + uint32 uiTremorTimer; int32 iAwakenTimer; uint32 uiWallMinionTimer; @@ -78,13 +90,7 @@ class boss_archaedas : public CreatureScript void Reset() override { - uiTremorTimer = 60000; - iAwakenTimer = 0; - uiWallMinionTimer = 10000; - - bWakingUp = false; - bGuardiansAwake = false; - bVaultWalkersAwake = false; + Initialize(); instance->SetData(0, 5); // respawn any dead minions me->setFaction(35); @@ -224,9 +230,19 @@ class npc_archaedas_minions : public CreatureScript { npc_archaedas_minionsAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = me->GetInstanceScript(); } + void Initialize() + { + uiArcing_Timer = 3000; + iAwakenTimer = 0; + + bWakingUp = false; + bAmIAwake = false; + } + uint32 uiArcing_Timer; int32 iAwakenTimer; bool bWakingUp; @@ -236,11 +252,7 @@ class npc_archaedas_minions : public CreatureScript void Reset() override { - uiArcing_Timer = 3000; - iAwakenTimer = 0; - - bWakingUp = false; - bAmIAwake = false; + Initialize(); me->setFaction(35); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp index 13a475604a7..6062f01691c 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp @@ -45,7 +45,17 @@ class boss_ironaya : public CreatureScript struct boss_ironayaAI : public ScriptedAI { - boss_ironayaAI(Creature* creature) : ScriptedAI(creature) { } + boss_ironayaAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + uiArcingTimer = 3000; + bHasCastKnockaway = false; + bHasCastWstomp = false; + } uint32 uiArcingTimer; bool bHasCastWstomp; @@ -53,9 +63,7 @@ class boss_ironaya : public CreatureScript void Reset() override { - uiArcingTimer = 3000; - bHasCastKnockaway = false; - bHasCastWstomp = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp index fdb71cbbf83..236cc55eee8 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp @@ -54,13 +54,21 @@ class npc_jadespine_basilisk : public CreatureScript struct npc_jadespine_basiliskAI : public ScriptedAI { - npc_jadespine_basiliskAI(Creature* creature) : ScriptedAI(creature) { } + npc_jadespine_basiliskAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + uiCslumberTimer = 2000; + } uint32 uiCslumberTimer; void Reset() override { - uiCslumberTimer = 2000; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp index 4eaf98d0a0e..b42f09b009e 100644 --- a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp +++ b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp @@ -55,12 +55,20 @@ public: struct boss_twilight_corrupterAI : public ScriptedAI { - boss_twilight_corrupterAI(Creature* creature) : ScriptedAI(creature) { } + boss_twilight_corrupterAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + KillCount = 0; + } void Reset() override { _events.Reset(); - KillCount = 0; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp index 25ee8bc1702..24d370155a6 100644 --- a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp +++ b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp @@ -56,15 +56,23 @@ public: struct npc_converted_sentryAI : public ScriptedAI { - npc_converted_sentryAI(Creature* creature) : ScriptedAI(creature) { } + npc_converted_sentryAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Credit = false; + Timer = 2500; + } bool Credit; uint32 Timer; void Reset() override { - Credit = false; - Timer = 2500; + Initialize(); } void MoveInLineOfSight(Unit* /*who*/) override { } diff --git a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp index b52cb9fa1bf..d1bb7ae3c6a 100644 --- a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp +++ b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp @@ -50,15 +50,21 @@ public: { npc_yennikuAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); bReset = false; } + void Initialize() + { + Reset_Timer = 0; + } + uint32 Reset_Timer; bool bReset; void Reset() override { - Reset_Timer = 0; + Initialize(); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); } diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp index 41e6bafd4a7..ea997c5563f 100644 --- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp +++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp @@ -99,7 +99,23 @@ public: struct npc_lady_sylvanas_windrunnerAI : public ScriptedAI { - npc_lady_sylvanas_windrunnerAI(Creature* creature) : ScriptedAI(creature) { } + npc_lady_sylvanas_windrunnerAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + LamentEventTimer = 5000; + LamentEvent = false; + targetGUID = 0; + + FadeTimer = 30000; + SummonSkeletonTimer = 20000; + BlackArrowTimer = 15000; + ShotTimer = 8000; + MultiShotTimer = 10000; + } uint32 LamentEventTimer; bool LamentEvent; @@ -113,15 +129,7 @@ public: void Reset() override { - LamentEventTimer = 5000; - LamentEvent = false; - targetGUID = 0; - - FadeTimer = 30000; - SummonSkeletonTimer = 20000; - BlackArrowTimer = 15000; - ShotTimer = 8000; - MultiShotTimer = 10000; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -231,7 +239,18 @@ public: struct npc_highborne_lamenterAI : public ScriptedAI { - npc_highborne_lamenterAI(Creature* creature) : ScriptedAI(creature) { } + npc_highborne_lamenterAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + EventMoveTimer = 10000; + EventCastTimer = 17500; + EventMove = true; + EventCast = true; + } uint32 EventMoveTimer; uint32 EventCastTimer; @@ -240,10 +259,7 @@ public: void Reset() override { - EventMoveTimer = 10000; - EventCastTimer = 17500; - EventMove = true; - EventCast = true; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h index b2097c34b33..51c5a5221ea 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h @@ -46,7 +46,8 @@ enum CreatureIds NPC_THE_MAKER = 17381, NPC_BROGGOK = 17380, NPC_KELIDAN_THE_BREAKER = 17377, - NPC_PRISONER = 17398 + NPC_PRISONER = 17398, + NPC_BROGGOK_POISON_CLOUD = 17662 }; enum GameObjectIds diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp index 55e9801320f..880efd0cfaf 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp @@ -43,6 +43,13 @@ enum Spells SPELL_POISON_CLOUD_PASSIVE = 30914 }; +enum Events +{ + EVENT_SLIME_SPRAY = 1, + EVENT_POISON_BOLT, + EVENT_POISON_CLOUD, +}; + class boss_broggok : public CreatureScript { public: @@ -52,17 +59,9 @@ class boss_broggok : public CreatureScript { boss_broggokAI(Creature* creature) : BossAI(creature, DATA_BROGGOK) { } - uint32 AcidSpray_Timer; - uint32 PoisonSpawn_Timer; - uint32 PoisonBolt_Timer; - bool canAttack; - void Reset() override { _Reset(); - AcidSpray_Timer = 10000; - PoisonSpawn_Timer = 5000; - PoisonBolt_Timer = 7000; DoAction(ACTION_RESET_BROGGOK); } @@ -72,44 +71,35 @@ class boss_broggok : public CreatureScript Talk(SAY_AGGRO); } - void UpdateAI(uint32 diff) override + void JustSummoned(Creature* summoned) override { - if (!UpdateVictim()) - return; - - if (!canAttack) - return; - - if (AcidSpray_Timer <= diff) - { - DoCastVictim(SPELL_SLIME_SPRAY); - AcidSpray_Timer = 4000 + rand32() % 8000; - } - else - AcidSpray_Timer -=diff; - - if (PoisonBolt_Timer <= diff) + if (summoned->GetEntry() == NPC_BROGGOK_POISON_CLOUD) { - DoCastVictim(SPELL_POISON_BOLT); - PoisonBolt_Timer = 4000 + rand32() % 8000; + summoned->SetReactState(REACT_PASSIVE); + summoned->CastSpell(summoned, SPELL_POISON_CLOUD_PASSIVE, true); + summons.Summon(summoned); } - else - PoisonBolt_Timer -=diff; - - if (PoisonSpawn_Timer <= diff) - { - DoCast(me, SPELL_POISON_CLOUD); - PoisonSpawn_Timer = 20000; - } - else - PoisonSpawn_Timer -=diff; - - DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) override + void ExecuteEvent(uint32 eventId) override { - _JustDied(); + switch (eventId) + { + case EVENT_SLIME_SPRAY: + DoCastVictim(SPELL_SLIME_SPRAY); + events.ScheduleEvent(EVENT_SLIME_SPRAY, urand(4000, 12000)); + break; + case EVENT_POISON_BOLT: + DoCastVictim(SPELL_POISON_BOLT); + events.ScheduleEvent(EVENT_POISON_BOLT, urand(4000, 12000)); + break; + case EVENT_POISON_CLOUD: + DoCast(me, SPELL_POISON_CLOUD); + events.ScheduleEvent(EVENT_POISON_CLOUD, 20000); + break; + default: + break; + } } void DoAction(int32 action) override @@ -122,12 +112,13 @@ class boss_broggok : public CreatureScript case ACTION_ACTIVATE_BROGGOK: me->SetReactState(REACT_AGGRESSIVE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE); - canAttack = true; + events.ScheduleEvent(EVENT_SLIME_SPRAY, 10000); + events.ScheduleEvent(EVENT_POISON_BOLT, 7000); + events.ScheduleEvent(EVENT_POISON_CLOUD, 5000); break; case ACTION_RESET_BROGGOK: me->SetReactState(REACT_PASSIVE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE); - canAttack = false; break; } } @@ -140,33 +131,6 @@ class boss_broggok : public CreatureScript } }; -class npc_broggok_poison_cloud : public CreatureScript -{ - public: - npc_broggok_poison_cloud() : CreatureScript("npc_broggok_poison_cloud") { } - - struct npc_broggok_poison_cloudAI : public ScriptedAI - { - npc_broggok_poison_cloudAI(Creature* creature) : ScriptedAI(creature) - { - SetCombatMovement(false); - creature->SetReactState(REACT_PASSIVE); - } - - void IsSummonedBy(Unit* /*summoner*/) override - { - DoCast(me, SPELL_POISON_CLOUD_PASSIVE, true); - } - - void UpdateAI(uint32 /*diff*/) override { } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_broggok_poison_cloudAI(creature); - } -}; - class go_broggok_lever : public GameObjectScript { public: @@ -228,7 +192,6 @@ class spell_broggok_poison_cloud : public SpellScriptLoader void AddSC_boss_broggok() { new boss_broggok(); - new npc_broggok_poison_cloud(); new go_broggok_lever(); new spell_broggok_poison_cloud(); } |