diff options
author | jackpoz <giacomopoz@gmail.com> | 2014-08-31 20:12:47 +0200 |
---|---|---|
committer | jackpoz <giacomopoz@gmail.com> | 2014-08-31 20:42:02 +0200 |
commit | dd4dbdcd16bb72b1b45c7971cb8b9e06030b6e16 (patch) | |
tree | 8bd974d003322df828efdf56059695c79da285ef /src | |
parent | 681cf8f27c341a8fadbadf1851b55b7b8a7e524a (diff) |
Core/Misc: Refactor scripts to fix static analysis warnings
First batch of fixes targeting 100 issues reported by Coverity
Diffstat (limited to 'src')
45 files changed, 1148 insertions, 448 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 77f318066a2..45450a0c129 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -74,6 +74,7 @@ Object::Object() : m_PackGUID(sizeof(uint64)+1) { m_objectTypeId = TYPEID_OBJECT; m_objectType = TYPEMASK_OBJECT; + m_updateFlag = UPDATEFLAG_NONE; m_uint32Values = NULL; m_valuesCount = 0; diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 99c3d234ef8..5ef6acbcce1 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -853,6 +853,7 @@ SpellInfo::SpellInfo(SpellEntry const* spellEntry) Effects[i] = SpellEffectInfo(spellEntry, this, i); ChainEntry = NULL; + ExplicitTargetMask = 0; } SpellInfo::~SpellInfo() diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp index 6f8b93bbdba..a9fc95fdb14 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp @@ -84,10 +84,20 @@ class npc_av_marshal_or_warmaster : public CreatureScript struct npc_av_marshal_or_warmasterAI : public ScriptedAI { - npc_av_marshal_or_warmasterAI(Creature* creature) : ScriptedAI(creature) { } + npc_av_marshal_or_warmasterAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + _hasAura = false; + } void Reset() override { + Initialize(); + events.Reset(); events.ScheduleEvent(EVENT_CHARGE_TARGET, urand(2 * IN_MILLISECONDS, 12 * IN_MILLISECONDS)); events.ScheduleEvent(EVENT_CLEAVE, urand(1 * IN_MILLISECONDS, 11 * IN_MILLISECONDS)); @@ -95,8 +105,6 @@ class npc_av_marshal_or_warmaster : public CreatureScript events.ScheduleEvent(EVENT_WHIRLWIND, urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS)); events.ScheduleEvent(EVENT_ENRAGE, urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS)); events.ScheduleEvent(EVENT_CHECK_RESET, 5000); - - _hasAura = false; } void JustRespawned() override diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp index 52a05f6c0a3..8bc969e9020 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp @@ -110,7 +110,20 @@ public: struct boss_balindaAI : public ScriptedAI { - boss_balindaAI(Creature* creature) : ScriptedAI(creature), summons(me) { } + boss_balindaAI(Creature* creature) : ScriptedAI(creature), summons(me) + { + Initialize(); + } + + void Initialize() + { + arcaneExplosionTimer = urand(5 * IN_MILLISECONDS, 15 * IN_MILLISECONDS); + coneOfColdTimer = 8 * IN_MILLISECONDS; + fireBoltTimer = 1 * IN_MILLISECONDS; + frostboltTimer = 4 * IN_MILLISECONDS; + resetTimer = 5 * IN_MILLISECONDS; + waterElementalTimer = 0; + } uint32 arcaneExplosionTimer; uint32 coneOfColdTimer; @@ -123,12 +136,7 @@ public: void Reset() override { - arcaneExplosionTimer = urand(5 * IN_MILLISECONDS, 15 * IN_MILLISECONDS); - coneOfColdTimer = 8 * IN_MILLISECONDS; - fireBoltTimer = 1 * IN_MILLISECONDS; - frostboltTimer = 4 * IN_MILLISECONDS; - resetTimer = 5 * IN_MILLISECONDS; - waterElementalTimer = 0; + Initialize(); summons.DespawnAll(); } diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp index 4ecb57177a6..49c5a61b7d0 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp @@ -45,7 +45,20 @@ public: struct boss_drektharAI : public ScriptedAI { - boss_drektharAI(Creature* creature) : ScriptedAI(creature) { } + boss_drektharAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + WhirlwindTimer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); + Whirlwind2Timer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); + KnockdownTimer = 12 * IN_MILLISECONDS; + FrenzyTimer = 6 * IN_MILLISECONDS; + ResetTimer = 5 * IN_MILLISECONDS; + YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); //20 to 30 seconds + } uint32 WhirlwindTimer; uint32 Whirlwind2Timer; @@ -56,12 +69,7 @@ public: void Reset() override { - WhirlwindTimer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); - Whirlwind2Timer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); - KnockdownTimer = 12 * IN_MILLISECONDS; - FrenzyTimer = 6 * IN_MILLISECONDS; - ResetTimer = 5 * IN_MILLISECONDS; - YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); //20 to 30 seconds + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp index 9e4fc5838ad..e422975bd1a 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp @@ -46,7 +46,20 @@ public: struct boss_galvangarAI : public ScriptedAI { - boss_galvangarAI(Creature* creature) : ScriptedAI(creature) { } + boss_galvangarAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + CleaveTimer = urand(1 * IN_MILLISECONDS, 9 * IN_MILLISECONDS); + FrighteningShoutTimer = urand(2 * IN_MILLISECONDS, 19 * IN_MILLISECONDS); + Whirlwind1Timer = urand(1 * IN_MILLISECONDS, 13 * IN_MILLISECONDS); + Whirlwind2Timer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); + MortalStrikeTimer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); + ResetTimer = 5 * IN_MILLISECONDS; + } uint32 CleaveTimer; uint32 FrighteningShoutTimer; @@ -57,12 +70,7 @@ public: void Reset() override { - CleaveTimer = urand(1 * IN_MILLISECONDS, 9 * IN_MILLISECONDS); - FrighteningShoutTimer = urand(2 * IN_MILLISECONDS, 19 * IN_MILLISECONDS); - Whirlwind1Timer = urand(1 * IN_MILLISECONDS, 13 * IN_MILLISECONDS); - Whirlwind2Timer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); - MortalStrikeTimer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); - ResetTimer = 5 * IN_MILLISECONDS; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp index 076607a5672..1eabfb67f57 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp @@ -42,7 +42,19 @@ public: struct boss_vanndarAI : public ScriptedAI { - boss_vanndarAI(Creature* creature) : ScriptedAI(creature) { } + boss_vanndarAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + AvatarTimer = 3 * IN_MILLISECONDS; + ThunderclapTimer = 4 * IN_MILLISECONDS; + StormboltTimer = 6 * IN_MILLISECONDS; + ResetTimer = 5 * IN_MILLISECONDS; + YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); + } uint32 AvatarTimer; uint32 ThunderclapTimer; @@ -52,11 +64,7 @@ public: void Reset() override { - AvatarTimer = 3 * IN_MILLISECONDS; - ThunderclapTimer = 4 * IN_MILLISECONDS; - StormboltTimer = 6 * IN_MILLISECONDS; - ResetTimer = 5 * IN_MILLISECONDS; - YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp index 907aaed3a0d..51ca327738b 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp @@ -124,10 +124,27 @@ public: { npc_grimstoneAI(Creature* creature) : npc_escortAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); MobSpawnId = rand32() % 6; } + void Initialize() + { + EventPhase = 0; + Event_Timer = 1000; + + MobCount = 0; + MobDeath_Timer = 0; + + for (uint8 i = 0; i < MAX_NPC_AMOUNT; ++i) + RingMobGUID[i] = 0; + + RingBossGUID = 0; + + CanWalk = false; + } + InstanceScript* instance; uint8 EventPhase; @@ -144,20 +161,9 @@ public: void Reset() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - - EventPhase = 0; - Event_Timer = 1000; - - MobCount = 0; - MobDeath_Timer = 0; + Initialize(); - for (uint8 i = 0; i < MAX_NPC_AMOUNT; ++i) - RingMobGUID[i] = 0; - - RingBossGUID = 0; - - CanWalk = false; + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } /// @todo move them to center @@ -353,7 +359,17 @@ public: struct npc_phalanxAI : public ScriptedAI { - npc_phalanxAI(Creature* creature) : ScriptedAI(creature) { } + npc_phalanxAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + ThunderClap_Timer = 12000; + FireballVolley_Timer = 0; + MightyBlow_Timer = 15000; + } uint32 ThunderClap_Timer; uint32 FireballVolley_Timer; @@ -361,9 +377,7 @@ public: void Reset() override { - ThunderClap_Timer = 12000; - FireballVolley_Timer = 0; - MightyBlow_Timer = 15000; + Initialize(); } void UpdateAI(uint32 diff) override @@ -1238,9 +1252,16 @@ public: { npc_rocknotAI(Creature* creature) : npc_escortAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + BreakKeg_Timer = 0; + BreakDoor_Timer = 0; + } + InstanceScript* instance; uint32 BreakKeg_Timer; @@ -1251,8 +1272,7 @@ public: if (HasEscortState(STATE_ESCORT_ESCORTING)) return; - BreakKeg_Timer = 0; - BreakDoor_Timer = 0; + Initialize(); } void DoGo(uint32 id, uint32 state) diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp index 83464c12230..77a8c68d28e 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp @@ -157,12 +157,18 @@ class boss_doomrel : public CreatureScript { boss_doomrelAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); _instance = creature->GetInstanceScript(); } - void Reset() override + void Initialize() { _voidwalkers = false; + } + + void Reset() override + { + Initialize(); me->setFaction(FACTION_FRIEND); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp index ed62e26075c..ea92aa91b69 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp @@ -53,13 +53,21 @@ public: struct boss_gythAI : public BossAI { - boss_gythAI(Creature* creature) : BossAI(creature, DATA_GYTH) { } + boss_gythAI(Creature* creature) : BossAI(creature, DATA_GYTH) + { + Initialize(); + } + + void Initialize() + { + SummonedRend = false; + } bool SummonedRend; void Reset() override { - SummonedRend = false; + Initialize(); if (instance->GetBossState(DATA_GYTH) == IN_PROGRESS) { instance->SetBossState(DATA_GYTH, DONE); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp index d5f7a4ce34b..b85cf4611ac 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp @@ -45,12 +45,20 @@ public: struct boss_halyconAI : public BossAI { - boss_halyconAI(Creature* creature) : BossAI(creature, DATA_HALYCON) { } + boss_halyconAI(Creature* creature) : BossAI(creature, DATA_HALYCON) + { + Initialize(); + } + + void Initialize() + { + Summoned = false; + } void Reset() override { _Reset(); - Summoned = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp index 23593442e86..bc1bdca1f61 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp @@ -46,15 +46,23 @@ public: struct boss_lord_valthalakAI : public BossAI { - boss_lord_valthalakAI(Creature* creature) : BossAI(creature, DATA_LORD_VALTHALAK) { } + boss_lord_valthalakAI(Creature* creature) : BossAI(creature, DATA_LORD_VALTHALAK) + { + Initialize(); + } - void Reset() override + void Initialize() { - _Reset(); frenzy40 = false; frenzy15 = false; } + void Reset() override + { + _Reset(); + Initialize(); + } + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp index cc6911b5da7..4b4633d54ca 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp @@ -57,14 +57,22 @@ public: struct boss_overlordwyrmthalakAI : public BossAI { - boss_overlordwyrmthalakAI(Creature* creature) : BossAI(creature, DATA_OVERLORD_WYRMTHALAK) { } + boss_overlordwyrmthalakAI(Creature* creature) : BossAI(creature, DATA_OVERLORD_WYRMTHALAK) + { + Initialize(); + } + + void Initialize() + { + Summoned = false; + } bool Summoned; void Reset() override { _Reset(); - Summoned = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp index efe0a0e2a78..1a97f668558 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp @@ -73,6 +73,8 @@ public: { boss_chromaggusAI(Creature* creature) : BossAI(creature, BOSS_CHROMAGGUS) { + Initialize(); + // Select the 2 breaths that we are going to use until despawned // 5 possiblities for the first breath, 4 for the second, 20 total possiblites // This way we don't end up casting 2 of the same breath @@ -173,12 +175,17 @@ public: EnterEvadeMode(); } + void Initialize() + { + CurrentVurln_Spell = 0; // We use this to store our last vulnerabilty spell so we can remove it later + Enraged = false; + } + void Reset() override { _Reset(); - CurrentVurln_Spell = 0; // We use this to store our last vulnerabilty spell so we can remove it later - Enraged = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp index 262befdd3ec..d5a08d157d0 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp @@ -166,11 +166,19 @@ public: struct boss_victor_nefariusAI : public BossAI { - boss_victor_nefariusAI(Creature* creature) : BossAI(creature, BOSS_NEFARIAN) { } + boss_victor_nefariusAI(Creature* creature) : BossAI(creature, BOSS_NEFARIAN) + { + Initialize(); + } - void Reset() override + void Initialize() { SpawnedAdds = 0; + } + + void Reset() override + { + Initialize(); if (me->GetMapId() == 469) { @@ -386,15 +394,23 @@ public: struct boss_nefarianAI : public BossAI { - boss_nefarianAI(Creature* creature) : BossAI(creature, BOSS_NEFARIAN) { } + boss_nefarianAI(Creature* creature) : BossAI(creature, BOSS_NEFARIAN) + { + Initialize(); + } - void Reset() override + void Initialize() { Phase3 = false; canDespawn = false; DespawnTimer = 30000; } + void Reset() override + { + Initialize(); + } + void JustReachedHome() override { canDespawn = true; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp index 8d4a84197b1..b83cc4694ab 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp @@ -68,13 +68,21 @@ public: struct boss_razorgoreAI : public BossAI { - boss_razorgoreAI(Creature* creature) : BossAI(creature, BOSS_RAZORGORE) { } + boss_razorgoreAI(Creature* creature) : BossAI(creature, BOSS_RAZORGORE) + { + Initialize(); + } + + void Initialize() + { + secondPhase = false; + } void Reset() override { _Reset(); - secondPhase = false; + Initialize(); instance->SetData(DATA_EGG_EVENT, NOT_STARTED); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp index e3085854f4a..1282cdcd313 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp @@ -70,19 +70,24 @@ public: { boss_vaelAI(Creature* creature) : BossAI(creature, BOSS_VAELASTRAZ) { + Initialize(); creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); creature->setFaction(35); creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } + void Initialize() + { + PlayerGUID = 0; + HasYelled = false; + } + void Reset() override { _Reset(); me->SetStandState(UNIT_STAND_STATE_DEAD); - PlayerGUID = 0; - - HasYelled = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp index 2a1309dc097..a268890c25d 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp @@ -108,13 +108,21 @@ class npc_firesworn : public CreatureScript struct npc_fireswornAI : public ScriptedAI { - npc_fireswornAI(Creature* creature) : ScriptedAI(creature) { } + npc_fireswornAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + immolateTimer = 4000; //These times are probably wrong + } uint32 immolateTimer; void Reset() override { - immolateTimer = 4000; //These times are probably wrong + Initialize(); } void DamageTaken(Unit* /*attacker*/, uint32& damage) override diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp index f9757997731..c8b33e48852 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp @@ -131,12 +131,18 @@ class npc_core_rager : public CreatureScript { npc_core_ragerAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + mangleTimer = 7 * IN_MILLISECONDS; // These times are probably wrong + } + void Reset() override { - mangleTimer = 7*IN_MILLISECONDS; // These times are probably wrong + Initialize(); } void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp index 6eafb41a8fa..4a0e22b1ba8 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp @@ -82,18 +82,24 @@ class boss_ragnaros : public CreatureScript { boss_ragnarosAI(Creature* creature) : BossAI(creature, BOSS_RAGNAROS) { + Initialize(); _introState = 0; me->SetReactState(REACT_PASSIVE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } - void Reset() override + void Initialize() { - BossAI::Reset(); _emergeTimer = 90000; _hasYelledMagmaBurst = false; _hasSubmergedOnce = false; _isBanished = false; + } + + void Reset() override + { + BossAI::Reset(); + Initialize(); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); } diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp index ffb3c02d101..b0222413513 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp @@ -52,9 +52,22 @@ public: { boss_mr_smiteAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiTrashTimer = urand(5000, 9000); + uiSlamTimer = 9000; + uiNimbleReflexesTimer = urand(15500, 31600); + + uiHealth = 0; + + uiPhase = 0; + uiTimer = 0; + } + InstanceScript* instance; uint32 uiTrashTimer; @@ -68,14 +81,7 @@ public: void Reset() override { - uiTrashTimer = urand(5000, 9000); - uiSlamTimer = 9000; - uiNimbleReflexesTimer = urand(15500, 31600); - - uiHealth = 0; - - uiPhase = 0; - uiTimer = 0; + Initialize(); SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp index 9fe21313f71..f469bf6deb1 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp @@ -60,7 +60,19 @@ public: struct boss_curatorAI : public ScriptedAI { - boss_curatorAI(Creature* creature) : ScriptedAI(creature) { } + boss_curatorAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + AddTimer = 10000; + HatefulBoltTimer = 15000; //This time may be wrong + BerserkTimer = 720000; //12 minutes + Enraged = false; + Evocating = false; + } uint32 AddTimer; uint32 HatefulBoltTimer; @@ -71,11 +83,7 @@ public: void Reset() override { - AddTimer = 10000; - HatefulBoltTimer = 15000; //This time may be wrong - BerserkTimer = 720000; //12 minutes - Enraged = false; - Evocating = false; + Initialize(); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_ARCANE, true); } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp index 5d1e5451ab1..bbddf0aa5f5 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp @@ -62,13 +62,20 @@ public: { boss_attumenAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + Phase = 1; CleaveTimer = urand(10000, 15000); CurseTimer = 30000; RandomYellTimer = urand(30000, 60000); //Occasionally yell ChargeTimer = 20000; + } + + void Initialize() + { ResetTimer = 0; + Midnight = 0; } uint64 Midnight; @@ -81,8 +88,7 @@ public: void Reset() override { - ResetTimer = 0; - Midnight = 0; + Initialize(); } void EnterEvadeMode() override @@ -127,7 +133,17 @@ public: struct boss_midnightAI : public ScriptedAI { - boss_midnightAI(Creature* creature) : ScriptedAI(creature) { } + boss_midnightAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Phase = 1; + Attumen = 0; + Mount_Timer = 0; + } uint64 Attumen; uint8 Phase; @@ -135,9 +151,7 @@ public: void Reset() override { - Phase = 1; - Attumen = 0; - Mount_Timer = 0; + Initialize(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetVisible(true); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp index 6ff1faf35b6..5b4f25aea44 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp @@ -105,12 +105,25 @@ public: { boss_moroesAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); memset(AddId, 0, sizeof(AddId)); memset(AddGUID, 0, sizeof(AddGUID)); instance = creature->GetInstanceScript(); } + void Initialize() + { + Vanish_Timer = 30000; + Blind_Timer = 35000; + Gouge_Timer = 23000; + Wait_Timer = 0; + CheckAdds_Timer = 5000; + + Enrage = false; + InVanish = false; + } + InstanceScript* instance; uint64 AddGUID[4]; @@ -127,14 +140,7 @@ public: void Reset() override { - Vanish_Timer = 30000; - Blind_Timer = 35000; - Gouge_Timer = 23000; - Wait_Timer = 0; - CheckAdds_Timer = 5000; - - Enrage = false; - InVanish = false; + Initialize(); if (me->IsAlive()) SpawnAdds(); @@ -391,7 +397,17 @@ public: struct boss_baroness_dorothea_millstipeAI : public boss_moroes_guestAI { //Shadow Priest - boss_baroness_dorothea_millstipeAI(Creature* creature) : boss_moroes_guestAI(creature) { } + boss_baroness_dorothea_millstipeAI(Creature* creature) : boss_moroes_guestAI(creature) + { + Initialize(); + } + + void Initialize() + { + ManaBurn_Timer = 7000; + MindFlay_Timer = 1000; + ShadowWordPain_Timer = 6000; + } uint32 ManaBurn_Timer; uint32 MindFlay_Timer; @@ -399,9 +415,7 @@ public: void Reset() override { - ManaBurn_Timer = 7000; - MindFlay_Timer = 1000; - ShadowWordPain_Timer = 6000; + Initialize(); DoCast(me, SPELL_SHADOWFORM, true); @@ -454,7 +468,17 @@ public: struct boss_baron_rafe_dreugerAI : public boss_moroes_guestAI { //Retr Pally - boss_baron_rafe_dreugerAI(Creature* creature) : boss_moroes_guestAI(creature){ } + boss_baron_rafe_dreugerAI(Creature* creature) : boss_moroes_guestAI(creature) + { + Initialize(); + } + + void Initialize() + { + HammerOfJustice_Timer = 1000; + SealOfCommand_Timer = 7000; + JudgementOfCommand_Timer = SealOfCommand_Timer + 29000; + } uint32 HammerOfJustice_Timer; uint32 SealOfCommand_Timer; @@ -462,9 +486,7 @@ public: void Reset() override { - HammerOfJustice_Timer = 1000; - SealOfCommand_Timer = 7000; - JudgementOfCommand_Timer = SealOfCommand_Timer + 29000; + Initialize(); boss_moroes_guestAI::Reset(); } @@ -511,7 +533,18 @@ public: struct boss_lady_catriona_von_indiAI : public boss_moroes_guestAI { //Holy Priest - boss_lady_catriona_von_indiAI(Creature* creature) : boss_moroes_guestAI(creature) { } + boss_lady_catriona_von_indiAI(Creature* creature) : boss_moroes_guestAI(creature) + { + Initialize(); + } + + void Initialize() + { + DispelMagic_Timer = 11000; + GreaterHeal_Timer = 1500; + HolyFire_Timer = 5000; + PowerWordShield_Timer = 1000; + } uint32 DispelMagic_Timer; uint32 GreaterHeal_Timer; @@ -520,10 +553,7 @@ public: void Reset() override { - DispelMagic_Timer = 11000; - GreaterHeal_Timer = 1500; - HolyFire_Timer = 5000; - PowerWordShield_Timer = 1000; + Initialize(); AcquireGUID(); @@ -581,7 +611,18 @@ public: struct boss_lady_keira_berrybuckAI : public boss_moroes_guestAI { //Holy Pally - boss_lady_keira_berrybuckAI(Creature* creature) : boss_moroes_guestAI(creature) { } + boss_lady_keira_berrybuckAI(Creature* creature) : boss_moroes_guestAI(creature) + { + Initialize(); + } + + void Initialize() + { + Cleanse_Timer = 13000; + GreaterBless_Timer = 1000; + HolyLight_Timer = 7000; + DivineShield_Timer = 31000; + } uint32 Cleanse_Timer; uint32 GreaterBless_Timer; @@ -590,10 +631,7 @@ public: void Reset() override { - Cleanse_Timer = 13000; - GreaterBless_Timer = 1000; - HolyLight_Timer = 7000; - DivineShield_Timer = 31000; + Initialize(); AcquireGUID(); @@ -655,7 +693,17 @@ public: struct boss_lord_robin_darisAI : public boss_moroes_guestAI { //Arms Warr - boss_lord_robin_darisAI(Creature* creature) : boss_moroes_guestAI(creature) { } + boss_lord_robin_darisAI(Creature* creature) : boss_moroes_guestAI(creature) + { + Initialize(); + } + + void Initialize() + { + Hamstring_Timer = 7000; + MortalStrike_Timer = 10000; + WhirlWind_Timer = 21000; + } uint32 Hamstring_Timer; uint32 MortalStrike_Timer; @@ -663,9 +711,7 @@ public: void Reset() override { - Hamstring_Timer = 7000; - MortalStrike_Timer = 10000; - WhirlWind_Timer = 21000; + Initialize(); boss_moroes_guestAI::Reset(); } @@ -711,7 +757,18 @@ public: struct boss_lord_crispin_ferenceAI : public boss_moroes_guestAI { //Arms Warr - boss_lord_crispin_ferenceAI(Creature* creature) : boss_moroes_guestAI(creature) { } + boss_lord_crispin_ferenceAI(Creature* creature) : boss_moroes_guestAI(creature) + { + Initialize(); + } + + void Initialize() + { + Disarm_Timer = 6000; + HeroicStrike_Timer = 10000; + ShieldBash_Timer = 8000; + ShieldWall_Timer = 4000; + } uint32 Disarm_Timer; uint32 HeroicStrike_Timer; @@ -720,10 +777,7 @@ public: void Reset() override { - Disarm_Timer = 6000; - HeroicStrike_Timer = 10000; - ShieldBash_Timer = 8000; - ShieldWall_Timer = 4000; + Initialize(); boss_moroes_guestAI::Reset(); } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp index ac24f868670..a928413fea0 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp @@ -78,6 +78,7 @@ public: { boss_netherspiteAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); for (int i=0; i<3; ++i) @@ -86,6 +87,19 @@ public: BeamTarget[i] = 0; BeamerGUID[i] = 0; } + + PortalPhase = false; + PhaseTimer = 0; + EmpowermentTimer = 0; + PortalTimer = 0; + } + + void Initialize() + { + Berserk = false; + NetherInfusionTimer = 540000; + VoidZoneTimer = 15000; + NetherbreathTimer = 3000; } InstanceScript* instance; @@ -129,10 +143,7 @@ public: void Reset() override { - Berserk = false; - NetherInfusionTimer = 540000; - VoidZoneTimer = 15000; - NetherbreathTimer = 3000; + Initialize(); HandleDoors(true); DestroyPortals(); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp index af9f8b72abf..9084a6b0371 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp @@ -78,10 +78,32 @@ public: { boss_nightbaneAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); Intro = true; } + void Initialize() + { + BellowingRoarTimer = 30000; + CharredEarthTimer = 15000; + DistractingAshTimer = 20000; + SmolderingBreathTimer = 10000; + TailSweepTimer = 12000; + RainofBonesTimer = 10000; + SmokingBlastTimer = 20000; + FireballBarrageTimer = 13000; + SearingCindersTimer = 14000; + WaitTimer = 1000; + + Phase = 1; + FlyCount = 0; + MovePhase = 0; + + Flying = false; + Movement = false; + } + InstanceScript* instance; uint32 Phase; @@ -111,20 +133,7 @@ public: void Reset() override { - BellowingRoarTimer = 30000; - CharredEarthTimer = 15000; - DistractingAshTimer = 20000; - SmolderingBreathTimer = 10000; - TailSweepTimer = 12000; - RainofBonesTimer = 10000; - SmokingBlastTimer = 20000; - FireballBarrageTimer = 13000; - SearingCindersTimer = 14000; - WaitTimer = 1000; - - Phase =1; - FlyCount = 0; - MovePhase = 0; + Initialize(); me->SetSpeed(MOVE_RUN, 2.0f); me->SetDisableGravity(true); @@ -138,9 +147,6 @@ public: HandleTerraceDoors(true); - Flying = false; - Movement = false; - if (!Intro) { me->SetHomePosition(IntroWay[7][0], IntroWay[7][1], IntroWay[7][2], 0); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index 518c4eacbd9..c09b349f143 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -186,10 +186,33 @@ public: { boss_malchezaarAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + instance = creature->GetInstanceScript(); memset(axes, 0, sizeof(axes)); } + void Initialize() + { + EnfeebleTimer = 30000; + EnfeebleResetTimer = 38000; + ShadowNovaTimer = 35500; + SWPainTimer = 20000; + AmplifyDamageTimer = 5000; + Cleave_Timer = 8000; + InfernalTimer = 40000; + InfernalCleanupTimer = 47000; + AxesTargetSwitchTimer = urand(7500, 20000); + SunderArmorTimer = urand(5000, 10000); + phase = 1; + + for (uint8 i = 0; i < 5; ++i) + { + enfeeble_targets[i] = 0; + enfeeble_health[i] = 0; + } + } + InstanceScript* instance; uint32 EnfeebleTimer; uint32 EnfeebleResetTimer; @@ -218,27 +241,11 @@ public: InfernalCleanup(); positions.clear(); - for (uint8 i = 0; i < 5; ++i) - { - enfeeble_targets[i] = 0; - enfeeble_health[i] = 0; - } + Initialize(); for (uint8 i = 0; i < TOTAL_INFERNAL_POINTS; ++i) positions.push_back(&InfernalPoints[i]); - EnfeebleTimer = 30000; - EnfeebleResetTimer = 38000; - ShadowNovaTimer = 35500; - SWPainTimer = 20000; - AmplifyDamageTimer = 5000; - Cleave_Timer = 8000; - InfernalTimer = 40000; - InfernalCleanupTimer = 47000; - AxesTargetSwitchTimer = urand(7500, 20000); - SunderArmorTimer = urand(5000, 10000); - phase = 1; - instance->HandleGameObject(instance->GetData64(DATA_GO_NETHER_DOOR), true); } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp index 6a89adca967..c66f2b335c4 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -93,9 +93,35 @@ public: { boss_aranAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + SecondarySpellTimer = 5000; + NormalCastTimer = 0; + SuperCastTimer = 35000; + BerserkTimer = 720000; + CloseDoorTimer = 15000; + + LastSuperSpell = rand32() % 3; + + FlameWreathTimer = 0; + FlameWreathCheckTime = 0; + + CurrentNormalSpell = 0; + ArcaneCooldown = 0; + FireCooldown = 0; + FrostCooldown = 0; + + DrinkInterruptTimer = 10000; + + ElementalsSpawned = false; + Drinking = false; + DrinkInturrupted = false; + } + InstanceScript* instance; uint32 SecondarySpellTimer; @@ -125,27 +151,7 @@ public: void Reset() override { - SecondarySpellTimer = 5000; - NormalCastTimer = 0; - SuperCastTimer = 35000; - BerserkTimer = 720000; - CloseDoorTimer = 15000; - - LastSuperSpell = rand32() % 3; - - FlameWreathTimer = 0; - FlameWreathCheckTime = 0; - - CurrentNormalSpell = 0; - ArcaneCooldown = 0; - FireCooldown = 0; - FrostCooldown = 0; - - DrinkInterruptTimer = 10000; - - ElementalsSpawned = false; - Drinking = false; - DrinkInturrupted = false; + Initialize(); // Not in progress instance->SetData(TYPE_ARAN, NOT_STARTED); @@ -362,6 +368,10 @@ public: Available[0] = SUPER_FLAME; Available[1] = SUPER_AE; break; + default: + Available[0] = 0; + Available[1] = 0; + break; } LastSuperSpell = Available[urand(0, 1)]; @@ -508,13 +518,21 @@ public: struct water_elementalAI : public ScriptedAI { - water_elementalAI(Creature* creature) : ScriptedAI(creature) { } + water_elementalAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + CastTimer = 2000 + (rand32() % 3000); + } uint32 CastTimer; void Reset() override { - CastTimer = 2000 + (rand32() % 3000); + Initialize(); } void EnterCombat(Unit* /*who*/) override { } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp index 9b66beb5986..ed40c18f70e 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp @@ -79,16 +79,22 @@ public: { npc_kilrekAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + AmplifyTimer = 2000; + } + InstanceScript* instance; uint32 AmplifyTimer; void Reset() override { - AmplifyTimer = 2000; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -131,13 +137,21 @@ public: struct npc_demon_chainAI : public ScriptedAI { - npc_demon_chainAI(Creature* creature) : ScriptedAI(creature) { } + npc_demon_chainAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + SacrificeGUID = 0; + } uint64 SacrificeGUID; void Reset() override { - SacrificeGUID = 0; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -203,13 +217,21 @@ public: struct npc_fiendish_impAI : public ScriptedAI { - npc_fiendish_impAI(Creature* creature) : ScriptedAI(creature) { } + npc_fiendish_impAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + FireboltTimer = 2000; + } uint32 FireboltTimer; void Reset() override { - FireboltTimer = 2000; + Initialize(); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); } @@ -247,11 +269,24 @@ public: { boss_terestianAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); for (uint8 i = 0; i < 2; ++i) PortalGUID[i] = 0; instance = creature->GetInstanceScript(); } + void Initialize() + { + PortalsCount = 0; + SacrificeTimer = 30000; + ShadowboltTimer = 5000; + SummonTimer = 10000; + BerserkTimer = 600000; + + SummonedPortals = false; + Berserk = false; + } + InstanceScript* instance; uint64 PortalGUID[2]; @@ -281,14 +316,7 @@ public: } } - PortalsCount = 0; - SacrificeTimer = 30000; - ShadowboltTimer = 5000; - SummonTimer = 10000; - BerserkTimer = 600000; - - SummonedPortals = false; - Berserk = false; + Initialize(); instance->SetData(TYPE_TERESTIAN, NOT_STARTED); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp index 19ec8da7fc9..ce8223c90cf 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp @@ -125,9 +125,22 @@ public: { boss_dorotheeAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + AggroTimer = 500; + + WaterBoltTimer = 5000; + FearTimer = 15000; + SummonTitoTimer = 47500; + + SummonedTito = false; + TitoDied = false; + } + InstanceScript* instance; uint32 AggroTimer; @@ -141,14 +154,7 @@ public: void Reset() override { - AggroTimer = 500; - - WaterBoltTimer = 5000; - FearTimer = 15000; - SummonTitoTimer = 47500; - - SummonedTito = false; - TitoDied = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override @@ -237,15 +243,23 @@ public: struct npc_titoAI : public ScriptedAI { - npc_titoAI(Creature* creature) : ScriptedAI(creature) { } + npc_titoAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + DorotheeGUID = 0; + YipTimer = 10000; + } uint64 DorotheeGUID; uint32 YipTimer; void Reset() override { - DorotheeGUID = 0; - YipTimer = 10000; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -305,9 +319,17 @@ public: { boss_strawmanAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + AggroTimer = 13000; + BrainBashTimer = 5000; + BrainWipeTimer = 7000; + } + InstanceScript* instance; uint32 AggroTimer; @@ -316,9 +338,7 @@ public: void Reset() override { - AggroTimer = 13000; - BrainBashTimer = 5000; - BrainWipeTimer = 7000; + Initialize(); } void AttackStart(Unit* who) override @@ -419,9 +439,19 @@ public: { boss_tinheadAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + AggroTimer = 15000; + CleaveTimer = 5000; + RustTimer = 30000; + + RustCount = 0; + } + InstanceScript* instance; uint32 AggroTimer; @@ -432,11 +462,7 @@ public: void Reset() override { - AggroTimer = 15000; - CleaveTimer = 5000; - RustTimer = 30000; - - RustCount = 0; + Initialize(); } void EnterCombat(Unit* /*who*/) override @@ -528,9 +554,18 @@ public: { boss_roarAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + AggroTimer = 20000; + MangleTimer = 5000; + ShredTimer = 10000; + ScreamTimer = 15000; + } + InstanceScript* instance; uint32 AggroTimer; @@ -540,10 +575,7 @@ public: void Reset() override { - AggroTimer = 20000; - MangleTimer = 5000; - ShredTimer = 10000; - ScreamTimer = 15000; + Initialize(); } void MoveInLineOfSight(Unit* who) override @@ -636,9 +668,16 @@ public: { boss_croneAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + CycloneTimer = 30000; + ChainLightningTimer = 10000; + } + InstanceScript* instance; uint32 CycloneTimer; @@ -646,8 +685,7 @@ public: void Reset() override { - CycloneTimer = 30000; - ChainLightningTimer = 10000; + Initialize(); } void JustReachedHome() override @@ -717,13 +755,21 @@ public: struct npc_cycloneAI : public ScriptedAI { - npc_cycloneAI(Creature* creature) : ScriptedAI(creature) { } + npc_cycloneAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + MoveTimer = 1000; + } uint32 MoveTimer; void Reset() override { - MoveTimer = 1000; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -812,9 +858,22 @@ public: { boss_bigbadwolfAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + ChaseTimer = 30000; + FearTimer = urand(25000, 35000); + SwipeTimer = 5000; + + HoodGUID = 0; + TempThreat = 0; + + IsChasing = false; + } + InstanceScript* instance; uint32 ChaseTimer; @@ -828,14 +887,7 @@ public: void Reset() override { - ChaseTimer = 30000; - FearTimer = urand(25000, 35000); - SwipeTimer = 5000; - - HoodGUID = 0; - TempThreat = 0; - - IsChasing = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override @@ -1011,12 +1063,30 @@ public: { boss_julianneAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); EntryYellTimer = 1000; AggroYellTimer = 10000; IsFakingDeath = false; } + void Initialize() + { + RomuloGUID = 0; + Phase = PHASE_JULIANNE; + + BlindingPassionTimer = 30000; + DevotionTimer = 15000; + EternalAffectionTimer = 25000; + PowerfulAttractionTimer = 5000; + SummonRomuloTimer = 10000; + DrinkPoisonTimer = 0; + ResurrectSelfTimer = 0; + + SummonedRomulo = false; + RomuloDead = false; + } + InstanceScript* instance; uint32 EntryYellTimer; @@ -1041,25 +1111,12 @@ public: void Reset() override { - RomuloGUID = 0; - Phase = PHASE_JULIANNE; - - BlindingPassionTimer = 30000; - DevotionTimer = 15000; - EternalAffectionTimer = 25000; - PowerfulAttractionTimer = 5000; - SummonRomuloTimer = 10000; - DrinkPoisonTimer = 0; - ResurrectSelfTimer = 0; - + Initialize(); if (IsFakingDeath) { Resurrect(me); IsFakingDeath = false; } - - SummonedRomulo = false; - RomuloDead = false; } void EnterCombat(Unit* /*who*/) override { } @@ -1131,11 +1188,27 @@ public: { boss_romuloAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); EntryYellTimer = 8000; AggroYellTimer = 15000; } + void Initialize() + { + JulianneGUID = 0; + Phase = PHASE_ROMULO; + + BackwardLungeTimer = 15000; + DaringTimer = 20000; + DeadlySwatheTimer = 25000; + PoisonThrustTimer = 10000; + ResurrectTimer = 10000; + + IsFakingDeath = false; + JulianneDead = false; + } + InstanceScript* instance; uint64 JulianneGUID; @@ -1154,17 +1227,7 @@ public: void Reset() override { - JulianneGUID = 0; - Phase = PHASE_ROMULO; - - BackwardLungeTimer = 15000; - DaringTimer = 20000; - DeadlySwatheTimer = 25000; - PoisonThrustTimer = 10000; - ResurrectTimer = 10000; - - IsFakingDeath = false; - JulianneDead = false; + Initialize(); } void JustReachedHome() override diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index c89950b7de3..c37829e26d5 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -131,11 +131,23 @@ public: { npc_barnesAI(Creature* creature) : npc_escortAI(creature) { + Initialize(); RaidWiped = false; m_uiEventId = 0; instance = creature->GetInstanceScript(); } + void Initialize() + { + m_uiSpotlightGUID = 0; + + TalkCount = 0; + TalkTimer = 2000; + WipeTimer = 5000; + + PerformanceReady = false; + } + InstanceScript* instance; uint64 m_uiSpotlightGUID; @@ -150,13 +162,7 @@ public: void Reset() override { - m_uiSpotlightGUID = 0; - - TalkCount = 0; - TalkTimer = 2000; - WipeTimer = 5000; - - PerformanceReady = false; + Initialize(); m_uiEventId = instance->GetData(DATA_OPERA_PERFORMANCE); } @@ -476,9 +482,20 @@ public: { npc_image_of_medivhAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + Step = 0; + FireArcanagosTimer = 0; + FireMedivhTimer = 0; instance = creature->GetInstanceScript(); } + void Initialize() + { + ArcanagosGUID = 0; + EventStarted = false; + YellTimer = 0; + } + InstanceScript* instance; uint64 ArcanagosGUID; @@ -492,9 +509,7 @@ public: void Reset() override { - ArcanagosGUID = 0; - EventStarted = false; - YellTimer = 0; + Initialize(); if (instance->GetData64(DATA_IMAGE_OF_MEDIVH) == 0) { diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 7944011c7a0..1aafb32cef9 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -103,9 +103,29 @@ public: { boss_felblood_kaelthasAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + /// @todo Timers + FireballTimer = 0; + PhoenixTimer = 10000; + FlameStrikeTimer = 25000; + CombatPulseTimer = 0; + + PyroblastTimer = 60000; + + GravityLapseTimer = 0; + GravityLapsePhase = 0; + + FirstGravityLapse = true; + HasTaunted = false; + + Phase = 0; + } + InstanceScript* instance; uint32 FireballTimer; @@ -134,21 +154,7 @@ public: void Reset() override { - /// @todo Timers - FireballTimer = 0; - PhoenixTimer = 10000; - FlameStrikeTimer = 25000; - CombatPulseTimer = 0; - - PyroblastTimer = 60000; - - GravityLapseTimer = 0; - GravityLapsePhase = 0; - - FirstGravityLapse = true; - HasTaunted = false; - - Phase = 0; + Initialize(); instance->SetBossState(DATA_KAELTHAS, NOT_STARTED); } @@ -439,13 +445,19 @@ public: { npc_felkael_flamestrikeAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + } + + void Initialize() + { + FlameStrikeTimer = 5000; } uint32 FlameStrikeTimer; void Reset() override { - FlameStrikeTimer = 5000; + Initialize(); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->setFaction(14); @@ -481,9 +493,18 @@ public: { npc_felkael_phoenixAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + BurnTimer = 2000; + Death_Timer = 3000; + Rebirth = false; + FakeDeath = false; + } + InstanceScript* instance; uint32 BurnTimer; uint32 Death_Timer; @@ -495,10 +516,7 @@ public: me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE); me->SetDisableGravity(true); DoCast(me, SPELL_PHOENIX_BURN, true); - BurnTimer = 2000; - Death_Timer = 3000; - Rebirth = false; - FakeDeath = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -592,13 +610,21 @@ public: struct npc_felkael_phoenix_eggAI : public ScriptedAI { - npc_felkael_phoenix_eggAI(Creature* creature) : ScriptedAI(creature) { } + npc_felkael_phoenix_eggAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + HatchTimer = 10000; + } uint32 HatchTimer; void Reset() override { - HatchTimer = 10000; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp index 40dedcf6d93..cc2af3dcea5 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp @@ -117,11 +117,24 @@ public: { boss_priestess_delrissaAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); memset(&m_auiLackeyGUID, 0, sizeof(m_auiLackeyGUID)); LackeyEntryList.clear(); } + void Initialize() + { + PlayersKilled = 0; + + HealTimer = 15000; + RenewTimer = 10000; + ShieldTimer = 2000; + SWPainTimer = 5000; + DispelTimer = 7500; + ResetTimer = 5000; + } + InstanceScript* instance; std::vector<uint32> LackeyEntryList; @@ -138,14 +151,7 @@ public: void Reset() override { - PlayersKilled = 0; - - HealTimer = 15000; - RenewTimer = 10000; - ShieldTimer = 2000; - SWPainTimer = 5000; - DispelTimer = 7500; - ResetTimer = 5000; + Initialize(); InitializeLackeys(); } @@ -353,11 +359,23 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI { boss_priestess_lackey_commonAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); memset(&m_auiLackeyGUIDs, 0, sizeof(m_auiLackeyGUIDs)); AcquireGUIDs(); } + void Initialize() + { + UsedPotion = false; + + // These guys does not follow normal threat system rules + // For later development, some alternative threat system should be made + // We do not know what this system is based upon, but one theory is class (healers=high threat, dps=medium, etc) + // We reset their threat frequently as an alternative until such a system exist + ResetThreatTimer = urand(5000, 20000); + } + InstanceScript* instance; uint64 m_auiLackeyGUIDs[MAX_ACTIVE_LACKEY]; @@ -367,13 +385,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI void Reset() override { - UsedPotion = false; - - // These guys does not follow normal threat system rules - // For later development, some alternative threat system should be made - // We do not know what this system is based upon, but one theory is class (healers=high threat, dps=medium, etc) - // We reset their threat frequently as an alternative until such a system exist - ResetThreatTimer = urand(5000, 20000); + Initialize(); // in case she is not alive and Reset was for some reason called, respawn her (most likely party wipe after killing her) if (Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA))) @@ -493,7 +505,20 @@ public: struct boss_kagani_nightstrikeAI : public boss_priestess_lackey_commonAI { //Rogue - boss_kagani_nightstrikeAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } + boss_kagani_nightstrikeAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) + { + Initialize(); + } + + void Initialize() + { + Gouge_Timer = 5500; + Kick_Timer = 7000; + Vanish_Timer = 2000; + Eviscerate_Timer = 6000; + Wait_Timer = 5000; + InVanish = false; + } uint32 Gouge_Timer; uint32 Kick_Timer; @@ -504,12 +529,7 @@ public: void Reset() override { - Gouge_Timer = 5500; - Kick_Timer = 7000; - Vanish_Timer = 2000; - Eviscerate_Timer = 6000; - Wait_Timer = 5000; - InVanish = false; + Initialize(); me->SetVisible(true); boss_priestess_lackey_commonAI::Reset(); @@ -597,7 +617,19 @@ public: struct boss_ellris_duskhallowAI : public boss_priestess_lackey_commonAI { //Warlock - boss_ellris_duskhallowAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } + boss_ellris_duskhallowAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) + { + Initialize(); + } + + void Initialize() + { + Immolate_Timer = 6000; + Shadow_Bolt_Timer = 3000; + Seed_of_Corruption_Timer = 2000; + Curse_of_Agony_Timer = 1000; + Fear_Timer = 10000; + } uint32 Immolate_Timer; uint32 Shadow_Bolt_Timer; @@ -607,11 +639,7 @@ public: void Reset() override { - Immolate_Timer = 6000; - Shadow_Bolt_Timer = 3000; - Seed_of_Corruption_Timer = 2000; - Curse_of_Agony_Timer = 1000; - Fear_Timer = 10000; + Initialize(); boss_priestess_lackey_commonAI::Reset(); } @@ -688,15 +716,23 @@ public: struct boss_eramas_brightblazeAI : public boss_priestess_lackey_commonAI { //Monk - boss_eramas_brightblazeAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } + boss_eramas_brightblazeAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) + { + Initialize(); + } + + void Initialize() + { + Knockdown_Timer = 6000; + Snap_Kick_Timer = 4500; + } uint32 Knockdown_Timer; uint32 Snap_Kick_Timer; void Reset() override { - Knockdown_Timer = 6000; - Snap_Kick_Timer = 4500; + Initialize(); boss_priestess_lackey_commonAI::Reset(); } @@ -749,7 +785,24 @@ public: struct boss_yazzaiAI : public boss_priestess_lackey_commonAI { //Mage - boss_yazzaiAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } + boss_yazzaiAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) + { + Initialize(); + } + + void Initialize() + { + HasIceBlocked = false; + + Polymorph_Timer = 1000; + Ice_Block_Timer = 20000; + Wait_Timer = 10000; + Blizzard_Timer = 8000; + Ice_Lance_Timer = 12000; + Cone_of_Cold_Timer = 10000; + Frostbolt_Timer = 3000; + Blink_Timer = 8000; + } bool HasIceBlocked; @@ -764,16 +817,7 @@ public: void Reset() override { - HasIceBlocked = false; - - Polymorph_Timer = 1000; - Ice_Block_Timer = 20000; - Wait_Timer = 10000; - Blizzard_Timer = 8000; - Ice_Lance_Timer = 12000; - Cone_of_Cold_Timer = 10000; - Frostbolt_Timer = 3000; - Blink_Timer = 8000; + Initialize(); boss_priestess_lackey_commonAI::Reset(); } @@ -879,7 +923,20 @@ public: struct boss_warlord_salarisAI : public boss_priestess_lackey_commonAI { //Warrior - boss_warlord_salarisAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } + boss_warlord_salarisAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) + { + Initialize(); + } + + void Initialize() + { + Intercept_Stun_Timer = 500; + Disarm_Timer = 6000; + Piercing_Howl_Timer = 10000; + Frightening_Shout_Timer = 18000; + Hamstring_Timer = 4500; + Mortal_Strike_Timer = 8000; + } uint32 Intercept_Stun_Timer; uint32 Disarm_Timer; @@ -890,12 +947,7 @@ public: void Reset() override { - Intercept_Stun_Timer = 500; - Disarm_Timer = 6000; - Piercing_Howl_Timer = 10000; - Frightening_Shout_Timer = 18000; - Hamstring_Timer = 4500; - Mortal_Strike_Timer = 8000; + Initialize(); boss_priestess_lackey_commonAI::Reset(); } @@ -1001,9 +1053,20 @@ public: //Hunter boss_garaxxasAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { + Initialize(); m_uiPetGUID = 0; } + void Initialize() + { + Aimed_Shot_Timer = 6000; + Shoot_Timer = 2500; + Concussive_Shot_Timer = 8000; + Multi_Shot_Timer = 10000; + Wing_Clip_Timer = 4000; + Freezing_Trap_Timer = 15000; + } + uint64 m_uiPetGUID; uint32 Aimed_Shot_Timer; @@ -1015,12 +1078,7 @@ public: void Reset() override { - Aimed_Shot_Timer = 6000; - Shoot_Timer = 2500; - Concussive_Shot_Timer = 8000; - Multi_Shot_Timer = 10000; - Wing_Clip_Timer = 4000; - Freezing_Trap_Timer = 15000; + Initialize(); Unit* pPet = ObjectAccessor::GetUnit(*me, m_uiPetGUID); if (!pPet) @@ -1110,7 +1168,20 @@ public: struct boss_apokoAI : public boss_priestess_lackey_commonAI { //Shaman - boss_apokoAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } + boss_apokoAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) + { + Initialize(); + } + + void Initialize() + { + Totem_Timer = 2000; + Totem_Amount = 1; + War_Stomp_Timer = 10000; + Purge_Timer = 8000; + Healing_Wave_Timer = 5000; + Frost_Shock_Timer = 7000; + } uint32 Totem_Timer; uint8 Totem_Amount; @@ -1121,12 +1192,7 @@ public: void Reset() override { - Totem_Timer = 2000; - Totem_Amount = 1; - War_Stomp_Timer = 10000; - Purge_Timer = 8000; - Healing_Wave_Timer = 5000; - Frost_Shock_Timer = 7000; + Initialize(); boss_priestess_lackey_commonAI::Reset(); } @@ -1199,7 +1265,19 @@ public: struct boss_zelfanAI : public boss_priestess_lackey_commonAI { //Engineer - boss_zelfanAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } + boss_zelfanAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) + { + Initialize(); + } + + void Initialize() + { + Goblin_Dragon_Gun_Timer = 20000; + Rocket_Launch_Timer = 7000; + Recombobulate_Timer = 4000; + High_Explosive_Sheep_Timer = 10000; + Fel_Iron_Bomb_Timer = 15000; + } uint32 Goblin_Dragon_Gun_Timer; uint32 Rocket_Launch_Timer; @@ -1209,11 +1287,7 @@ public: void Reset() override { - Goblin_Dragon_Gun_Timer = 20000; - Rocket_Launch_Timer = 7000; - Recombobulate_Timer = 4000; - High_Explosive_Sheep_Timer = 10000; - Fel_Iron_Bomb_Timer = 15000; + Initialize(); boss_priestess_lackey_commonAI::Reset(); } diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp index 28f4800b6cf..a20f595183f 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp @@ -115,13 +115,21 @@ public: struct npc_kalecgosAI : public ScriptedAI { - npc_kalecgosAI(Creature* creature) : ScriptedAI(creature) { } + npc_kalecgosAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + m_uiTransformTimer = 0; + } uint32 m_uiTransformTimer; void Reset() override { - m_uiTransformTimer = 0; + Initialize(); // we must assume he appear as dragon somewhere outside the platform of orb, and then move directly to here if (me->GetEntry() != NPC_KAEL) diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index 95990f18829..7355674963a 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -102,9 +102,21 @@ public: { npc_unworthy_initiateAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); me->SetReactState(REACT_PASSIVE); if (!me->GetCurrentEquipmentId()) me->SetCurrentEquipmentId(me->GetOriginalEquipmentId()); + + playerGUID = 0; + wait_timer = 0; + anchorX = 0.f; + anchorY = 0.f; + } + + void Initialize() + { + anchorGUID = 0; + phase = PHASE_CHAINED; } uint64 playerGUID; @@ -117,8 +129,7 @@ public: void Reset() override { - anchorGUID = 0; - phase = PHASE_CHAINED; + Initialize(); events.Reset(); me->setFaction(7); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); @@ -516,7 +527,15 @@ public: { npc_death_knight_initiateAI(Creature* creature) : CombatAI(creature) { + Initialize(); + } + + void Initialize() + { + m_uiDuelerGUID = 0; + m_uiDuelTimer = 5000; m_bIsDuelInProgress = false; + lose = false; } bool lose; @@ -526,15 +545,11 @@ public: void Reset() override { - lose = false; + Initialize(); + me->RestoreFaction(); CombatAI::Reset(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15); - - m_uiDuelerGUID = 0; - m_uiDuelTimer = 5000; - m_bIsDuelInProgress = false; } void SpellHit(Unit* pCaster, const SpellInfo* pSpell) override @@ -630,9 +645,12 @@ class npc_dark_rider_of_acherus : public CreatureScript struct npc_dark_rider_of_acherusAI : public ScriptedAI { - npc_dark_rider_of_acherusAI(Creature* creature) : ScriptedAI(creature) { } + npc_dark_rider_of_acherusAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { PhaseTimer = 4000; Phase = 0; @@ -640,6 +658,11 @@ class npc_dark_rider_of_acherus : public CreatureScript TargetGUID = 0; } + void Reset() override + { + Initialize(); + } + void UpdateAI(uint32 diff) override { if (!Intro || !TargetGUID) @@ -1067,18 +1090,24 @@ class npc_scarlet_miner : public CreatureScript { npc_scarlet_minerAI(Creature* creature) : npc_escortAI(creature) { + Initialize(); me->SetReactState(REACT_PASSIVE); } + void Initialize() + { + carGUID = 0; + IntroTimer = 0; + IntroPhase = 0; + } + uint32 IntroTimer; uint32 IntroPhase; uint64 carGUID; void Reset() override { - carGUID = 0; - IntroTimer = 0; - IntroPhase = 0; + Initialize(); } void IsSummonedBy(Unit* summoner) override diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp index 8e3743ad5e2..08e3de1941a 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp @@ -51,7 +51,17 @@ public: struct npc_crusade_persuadedAI : public ScriptedAI { - npc_crusade_persuadedAI(Creature* creature) : ScriptedAI(creature) { } + npc_crusade_persuadedAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + speechTimer = 0; + speechCounter = 0; + playerGUID = 0; + } uint32 speechTimer; uint32 speechCounter; @@ -59,9 +69,7 @@ public: void Reset() override { - speechTimer = 0; - speechCounter = 0; - playerGUID = 0; + Initialize(); me->SetReactState(REACT_AGGRESSIVE); me->RestoreFaction(); } @@ -207,16 +215,22 @@ public: { npc_koltira_deathweaverAI(Creature* creature) : npc_escortAI(creature) { + Initialize(); me->SetReactState(REACT_DEFENSIVE); } + void Initialize() + { + wave = 0; + waveTimer = 3000; + valrothGUID = 0; + } + void Reset() override { if (!HasEscortState(STATE_ESCORT_ESCORTING)) { - wave = 0; - waveTimer = 3000; - valrothGUID = 0; + Initialize(); me->LoadEquipment(0, true); me->RemoveAurasDueToSpell(SPELL_ANTI_MAGIC_ZONE); me->RemoveAurasDueToSpell(SPELL_KOLTIRA_TRANSFORM); @@ -467,7 +481,17 @@ public: struct npc_high_inquisitor_valrothAI : public ScriptedAI { - npc_high_inquisitor_valrothAI(Creature* creature) : ScriptedAI(creature) { } + npc_high_inquisitor_valrothAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + uiRenew_timer = 1000; + uiInquisitor_Penance_timer = 2000; + uiValroth_Smite_timer = 1000; + } uint32 uiRenew_timer; uint32 uiInquisitor_Penance_timer; @@ -475,9 +499,7 @@ public: void Reset() override { - uiRenew_timer = 1000; - uiInquisitor_Penance_timer = 2000; - uiValroth_Smite_timer = 1000; + Initialize(); } void EnterCombat(Unit* who) override @@ -603,7 +625,17 @@ public: struct npc_a_special_surpriseAI : public ScriptedAI { - npc_a_special_surpriseAI(Creature* creature) : ScriptedAI(creature) { } + npc_a_special_surpriseAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + ExecuteSpeech_Timer = 0; + ExecuteSpeech_Counter = 0; + PlayerGUID = 0; + } uint32 ExecuteSpeech_Timer; uint32 ExecuteSpeech_Counter; @@ -611,9 +643,7 @@ public: void Reset() override { - ExecuteSpeech_Timer = 0; - ExecuteSpeech_Counter = 0; - PlayerGUID = 0; + Initialize(); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); } diff --git a/src/server/scripts/Outland/zone_zangarmarsh.cpp b/src/server/scripts/Outland/zone_zangarmarsh.cpp index b9736c523c3..c7627d1aa04 100644 --- a/src/server/scripts/Outland/zone_zangarmarsh.cpp +++ b/src/server/scripts/Outland/zone_zangarmarsh.cpp @@ -178,6 +178,12 @@ public: npc_cooshcooshAI(Creature* creature) : ScriptedAI(creature) { m_uiNormFaction = creature->getFaction(); + Initialize(); + } + + void Initialize() + { + LightningBolt_Timer = 2000; } uint32 m_uiNormFaction; @@ -185,7 +191,7 @@ public: void Reset() override { - LightningBolt_Timer = 2000; + Initialize(); if (me->getFaction() != m_uiNormFaction) me->setFaction(m_uiNormFaction); } diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp index 34da2a242f4..b24336cb33c 100644 --- a/src/server/scripts/Pet/pet_dk.cpp +++ b/src/server/scripts/Pet/pet_dk.cpp @@ -43,12 +43,20 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript struct npc_pet_dk_ebon_gargoyleAI : CasterAI { - npc_pet_dk_ebon_gargoyleAI(Creature* creature) : CasterAI(creature) { } + npc_pet_dk_ebon_gargoyleAI(Creature* creature) : CasterAI(creature) + { + Initialize(); + } - void InitializeAI() override + void Initialize() { // Not needed to be despawned now _despawnTimer = 0; + } + + void InitializeAI() override + { + Initialize(); CasterAI::InitializeAI(); uint64 ownerGuid = me->GetOwnerGUID(); diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp index cfb4820c040..d0e950dec32 100644 --- a/src/server/scripts/Pet/pet_generic.cpp +++ b/src/server/scripts/Pet/pet_generic.cpp @@ -39,11 +39,19 @@ class npc_pet_gen_mojo : public CreatureScript struct npc_pet_gen_mojoAI : public ScriptedAI { - npc_pet_gen_mojoAI(Creature* creature) : ScriptedAI(creature) { } + npc_pet_gen_mojoAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { _victimGUID = 0; + } + + void Reset() override + { + Initialize(); if (Unit* owner = me->GetOwner()) me->GetMotionMaster()->MoveFollow(owner, 0.0f, 0.0f); diff --git a/src/server/scripts/Pet/pet_hunter.cpp b/src/server/scripts/Pet/pet_hunter.cpp index 8fd6cb54b0e..20412415fbe 100644 --- a/src/server/scripts/Pet/pet_hunter.cpp +++ b/src/server/scripts/Pet/pet_hunter.cpp @@ -42,13 +42,22 @@ class npc_pet_hunter_snake_trap : public CreatureScript struct npc_pet_hunter_snake_trapAI : public ScriptedAI { - npc_pet_hunter_snake_trapAI(Creature* creature) : ScriptedAI(creature) { } + npc_pet_hunter_snake_trapAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + _spellTimer = 0; + _isViper = false; + } void EnterCombat(Unit* /*who*/) override { } void Reset() override { - _spellTimer = 0; + Initialize(); CreatureTemplate const* Info = me->GetCreatureTemplate(); diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp index 950b4cd10e9..23e373312cb 100644 --- a/src/server/scripts/World/boss_emerald_dragons.cpp +++ b/src/server/scripts/World/boss_emerald_dragons.cpp @@ -170,13 +170,19 @@ class npc_dream_fog : public CreatureScript { npc_dream_fogAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); } - void Reset() override + void Initialize() { _roamTimer = 0; } + void Reset() override + { + Initialize(); + } + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) @@ -247,11 +253,17 @@ class boss_ysondre : public CreatureScript { boss_ysondreAI(Creature* creature) : emerald_dragonAI(creature) { + Initialize(); } - void Reset() override + void Initialize() { _stage = 1; + } + + void Reset() override + { + Initialize(); emerald_dragonAI::Reset(); events.ScheduleEvent(EVENT_LIGHTNING_WAVE, 12000); } @@ -335,11 +347,17 @@ class boss_lethon : public CreatureScript { boss_lethonAI(Creature* creature) : emerald_dragonAI(creature) { + Initialize(); } - void Reset() override + void Initialize() { _stage = 1; + } + + void Reset() override + { + Initialize(); emerald_dragonAI::Reset(); events.ScheduleEvent(EVENT_SHADOW_BOLT_WHIRL, 10000); } @@ -457,11 +475,17 @@ class boss_emeriss : public CreatureScript { boss_emerissAI(Creature* creature) : emerald_dragonAI(creature) { + Initialize(); } - void Reset() override + void Initialize() { _stage = 1; + } + + void Reset() override + { + Initialize(); emerald_dragonAI::Reset(); events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 12000); } @@ -549,16 +573,22 @@ class boss_taerar : public CreatureScript { boss_taerarAI(Creature* creature) : emerald_dragonAI(creature) { + Initialize(); } - void Reset() override + void Initialize() { - me->RemoveAurasDueToSpell(SPELL_SHADE); _stage = 1; - _shades = 0; _banished = false; _banishedTimer = 0; + } + + void Reset() override + { + me->RemoveAurasDueToSpell(SPELL_SHADE); + + Initialize(); emerald_dragonAI::Reset(); events.ScheduleEvent(EVENT_ARCANE_BLAST, 12000); diff --git a/src/server/scripts/World/guards.cpp b/src/server/scripts/World/guards.cpp index a156a41fcef..bd953a285ab 100644 --- a/src/server/scripts/World/guards.cpp +++ b/src/server/scripts/World/guards.cpp @@ -54,14 +54,22 @@ public: struct guard_genericAI : public GuardAI { - guard_genericAI(Creature* creature) : GuardAI(creature) { } + guard_genericAI(Creature* creature) : GuardAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { globalCooldown = 0; buffTimer = 0; } + void Reset() override + { + Initialize(); + } + void EnterCombat(Unit* who) override { if (me->GetEntry() == NPC_CENARION_HOLD_INFANTRY) @@ -263,9 +271,12 @@ public: struct guard_shattrath_scryerAI : public GuardAI { - guard_shattrath_scryerAI(Creature* creature) : GuardAI(creature) { } + guard_shattrath_scryerAI(Creature* creature) : GuardAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { banishTimer = 5000; exileTimer = 8500; @@ -273,6 +284,11 @@ public: canTeleport = false; } + void Reset() override + { + Initialize(); + } + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) @@ -328,9 +344,12 @@ public: struct guard_shattrath_aldorAI : public GuardAI { - guard_shattrath_aldorAI(Creature* creature) : GuardAI(creature) { } + guard_shattrath_aldorAI(Creature* creature) : GuardAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { banishTimer = 5000; exileTimer = 8500; @@ -338,6 +357,11 @@ public: canTeleport = false; } + void Reset() override + { + Initialize(); + } + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) diff --git a/src/server/scripts/World/mob_generic_creature.cpp b/src/server/scripts/World/mob_generic_creature.cpp index a27a78a5338..eb6fbea170e 100644 --- a/src/server/scripts/World/mob_generic_creature.cpp +++ b/src/server/scripts/World/mob_generic_creature.cpp @@ -36,7 +36,17 @@ public: struct generic_creatureAI : public ScriptedAI { - generic_creatureAI(Creature* creature) : ScriptedAI(creature) { } + generic_creatureAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + GlobalCooldown = 0; + BuffTimer = 0; //Rebuff as soon as we can + IsSelfRooted = false; + } uint32 GlobalCooldown; //This variable acts like the global cooldown that players have (1.5 seconds) uint32 BuffTimer; //This variable keeps track of buffs @@ -44,9 +54,7 @@ public: void Reset() override { - GlobalCooldown = 0; - BuffTimer = 0; //Rebuff as soon as we can - IsSelfRooted = false; + Initialize(); } void EnterCombat(Unit* who) override diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index e8a4a78e1bb..944ebe27b7b 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -329,13 +329,21 @@ public: struct npc_chicken_cluckAI : public ScriptedAI { - npc_chicken_cluckAI(Creature* creature) : ScriptedAI(creature) { } + npc_chicken_cluckAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + ResetFlagTimer = 120000; + } uint32 ResetFlagTimer; void Reset() override { - ResetFlagTimer = 120000; + Initialize(); me->setFaction(FACTION_CHICKEN); me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); } @@ -424,15 +432,23 @@ public: struct npc_dancing_flamesAI : public ScriptedAI { - npc_dancing_flamesAI(Creature* creature) : ScriptedAI(creature) { } + npc_dancing_flamesAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Active = true; + CanIteract = 3500; + } bool Active; uint32 CanIteract; void Reset() override { - Active = true; - CanIteract = 3500; + Initialize(); DoCast(me, SPELL_BRAZIER, true); DoCast(me, SPELL_FIERY_AURA, false); float x, y, z; @@ -575,7 +591,25 @@ public: struct npc_doctorAI : public ScriptedAI { - npc_doctorAI(Creature* creature) : ScriptedAI(creature) { } + npc_doctorAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + PlayerGUID = 0; + + SummonPatientTimer = 10000; + SummonPatientCount = 0; + PatientDiedCount = 0; + PatientSavedCount = 0; + + Patients.clear(); + Coordinates.clear(); + + Event = false; + } uint64 PlayerGUID; @@ -591,18 +625,7 @@ public: void Reset() override { - PlayerGUID = 0; - - SummonPatientTimer = 10000; - SummonPatientCount = 0; - PatientDiedCount = 0; - PatientSavedCount = 0; - - Patients.clear(); - Coordinates.clear(); - - Event = false; - + Initialize(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } @@ -720,15 +743,23 @@ public: struct npc_injured_patientAI : public ScriptedAI { - npc_injured_patientAI(Creature* creature) : ScriptedAI(creature) { } + npc_injured_patientAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + DoctorGUID = 0; + Coord = NULL; + } uint64 DoctorGUID; Location* Coord; void Reset() override { - DoctorGUID = 0; - Coord = NULL; + Initialize(); //no select me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -1449,14 +1480,20 @@ public: { npc_tonk_mineAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); me->SetReactState(REACT_PASSIVE); } + void Initialize() + { + ExplosionTimer = 3000; + } + uint32 ExplosionTimer; void Reset() override { - ExplosionTimer = 3000; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -1651,13 +1688,21 @@ class npc_wormhole : public CreatureScript struct npc_wormholeAI : public PassiveAI { - npc_wormholeAI(Creature* creature) : PassiveAI(creature) { } + npc_wormholeAI(Creature* creature) : PassiveAI(creature) + { + Initialize(); + } - void InitializeAI() override + void Initialize() { _showUnderground = urand(0, 100) == 0; // Guessed value, it is really rare though } + void InitializeAI() override + { + Initialize(); + } + uint32 GetData(uint32 type) const override { return (type == DATA_SHOW_UNDERGROUND && _showUnderground) ? 1 : 0; @@ -2305,7 +2350,19 @@ public: struct npc_spring_rabbitAI : public ScriptedAI { - npc_spring_rabbitAI(Creature* creature) : ScriptedAI(creature) { } + npc_spring_rabbitAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + inLove = false; + rabbitGUID = 0; + jumpTimer = urand(5000, 10000); + bunnyTimer = urand(10000, 20000); + searchTimer = urand(5000, 10000); + } bool inLove; uint32 jumpTimer; @@ -2315,11 +2372,7 @@ public: void Reset() override { - inLove = false; - rabbitGUID = 0; - jumpTimer = urand(5000, 10000); - bunnyTimer = urand(10000, 20000); - searchTimer = urand(5000, 10000); + Initialize(); if (Unit* owner = me->GetOwner()) me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); } diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp index c527ec32ddb..519f59cb086 100644 --- a/src/tools/vmap4_extractor/model.cpp +++ b/src/tools/vmap4_extractor/model.cpp @@ -143,6 +143,7 @@ Vec3D fixCoordSystem2(Vec3D v) } ModelInstance::ModelInstance(MPQFile& f, char const* ModelInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE *pDirfile) + : scale(0), flags(0) { float ff[3]; f.read(&id, 4); |