Core/Misc: Refactor scripts to fix static analysis warnings

First batch of fixes targeting 100 issues reported by Coverity
This commit is contained in:
jackpoz
2014-08-31 20:12:47 +02:00
parent 681cf8f27c
commit dd4dbdcd16
45 changed files with 1150 additions and 450 deletions

View File

@@ -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;

View File

@@ -853,6 +853,7 @@ SpellInfo::SpellInfo(SpellEntry const* spellEntry)
Effects[i] = SpellEffectInfo(spellEntry, this, i);
ChainEntry = NULL;
ExplicitTargetMask = 0;
}
SpellInfo::~SpellInfo()

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
{
Initialize();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
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;
}
/// @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)

View File

@@ -157,12 +157,18 @@ class boss_doomrel : public CreatureScript
{
boss_doomrelAI(Creature* creature) : ScriptedAI(creature)
{
Initialize();
_instance = creature->GetInstanceScript();
}
void Initialize()
{
_voidwalkers = false;
}
void Reset() override
{
_voidwalkers = false;
Initialize();
me->setFaction(FACTION_FRIEND);

View File

@@ -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);

View File

@@ -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

View File

@@ -46,13 +46,21 @@ 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 Initialize()
{
frenzy40 = false;
frenzy15 = false;
}
void Reset() override
{
_Reset();
frenzy40 = false;
frenzy15 = false;
Initialize();
}
void EnterCombat(Unit* /*who*/) override

View File

@@ -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

View File

@@ -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

View File

@@ -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 Initialize()
{
SpawnedAdds = 0;
}
void Reset() override
{
SpawnedAdds = 0;
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;

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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();
}

View File

@@ -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();

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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 { }

View File

@@ -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);

View File

@@ -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

View File

@@ -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)
{

View File

@@ -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 { }

View File

@@ -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();
}

View File

@@ -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)

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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 Initialize()
{
_victimGUID = 0;
}
void Reset() override
{
_victimGUID = 0;
Initialize();
if (Unit* owner = me->GetOwner())
me->GetMotionMaster()->MoveFollow(owner, 0.0f, 0.0f);

View File

@@ -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();

View File

@@ -170,11 +170,17 @@ class npc_dream_fog : public CreatureScript
{
npc_dream_fogAI(Creature* creature) : ScriptedAI(creature)
{
Initialize();
}
void Initialize()
{
_roamTimer = 0;
}
void Reset() override
{
_roamTimer = 0;
Initialize();
}
void UpdateAI(uint32 diff) override
@@ -247,11 +253,17 @@ class boss_ysondre : public CreatureScript
{
boss_ysondreAI(Creature* creature) : emerald_dragonAI(creature)
{
Initialize();
}
void Initialize()
{
_stage = 1;
}
void Reset() override
{
_stage = 1;
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 Initialize()
{
_stage = 1;
}
void Reset() override
{
_stage = 1;
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 Initialize()
{
_stage = 1;
}
void Reset() override
{
_stage = 1;
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 Initialize()
{
_stage = 1;
_shades = 0;
_banished = false;
_banishedTimer = 0;
}
void Reset() override
{
me->RemoveAurasDueToSpell(SPELL_SHADE);
_stage = 1;
_shades = 0;
_banished = false;
_banishedTimer = 0;
Initialize();
emerald_dragonAI::Reset();
events.ScheduleEvent(EVENT_ARCANE_BLAST, 12000);

View File

@@ -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())

View File

@@ -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

View File

@@ -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,11 +1688,19 @@ class npc_wormhole : public CreatureScript
struct npc_wormholeAI : public PassiveAI
{
npc_wormholeAI(Creature* creature) : PassiveAI(creature) { }
npc_wormholeAI(Creature* creature) : PassiveAI(creature)
{
Initialize();
}
void Initialize()
{
_showUnderground = urand(0, 100) == 0; // Guessed value, it is really rare though
}
void InitializeAI() override
{
_showUnderground = urand(0, 100) == 0; // Guessed value, it is really rare though
Initialize();
}
uint32 GetData(uint32 type) const override
@@ -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);
}

View File

@@ -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);