aboutsummaryrefslogtreecommitdiff
path: root/src/scripts/eastern_kingdoms
diff options
context:
space:
mode:
authorAnubisss <none@none>2010-03-27 13:54:38 +0100
committerAnubisss <none@none>2010-03-27 13:54:38 +0100
commitbe739e99009c2796d0153e7b3dabcf819e915541 (patch)
tree22017cf657485b228e93b0dc496d25a5246bd83d /src/scripts/eastern_kingdoms
parent099ef2a9b6e2e1c4986878c15ce5758edba5a71c (diff)
Use GUIDs instead of "global" pointers in ~all boss/instance scripts.
GUIDs are most safer than pointers and in some cases can avoid segmentation faults. == - == Let me show a simple example: We have a pointer to a creature: Creature *pCreature; and try to search a creature and store it in the pointer: pCreature = SearchCreature(ID); We can check simply if the creature found or not: if(pCreature) - if this give true: creature found and we have a memory address which points to the creature - if this give false: creature not found and this is a NULL pointer Suppose that we have a valid pointer, so creature found. We wanna use that pointer somewhere, for example in script phase 3. But we delete the creature(from world) in phase 1. In phase 3: if(pCreature) pCreature->DoSomeShit(); The if condition gives true, but pCreature points to an _invalid_ address. In that address maybe have "nothing" or another creature's object or a player or anything else, dont know that. ~~ - ~~ Let me show the correct way: Creature's GUID: uint64 CreatureGUID; search the creature and set the GUID: Creature *pCreature = SearchCreature(ID); CreatureGUID = pCreature ? pCreature->GetGUID() : 0; // if pCreature is NULL set the GUID to 0 So we have a GUID and not a pointer. We can get the creature from that GUID: Creature *pCreature = GetCreature(CreatureGUID); and we can simply check it is valid or not(found or not): if(pCreature) So we deleted the creature in phase 1 and try to use it in phase 3: Creature *pCreature = GetCreature(CreatureGUID); And this gives NULL because GetCreature() can't find the creature which GUID is CreatureGUID. if(pCreature) // pCreature is NULL pCreature->DoSomeShit(); // DoSomeShit() not called == - == Remove some not used variables. Some clean. TODO: Should search/fix these in zones scripts. --HG-- branch : trunk
Diffstat (limited to 'src/scripts/eastern_kingdoms')
-rw-r--r--src/scripts/eastern_kingdoms/blackrock_depths/boss_moira_bronzebeard.cpp4
-rw-r--r--src/scripts/eastern_kingdoms/blackrock_depths/boss_tomb_of_seven.cpp4
-rw-r--r--src/scripts/eastern_kingdoms/blackrock_spire/boss_gyth.cpp1
-rw-r--r--src/scripts/eastern_kingdoms/blackrock_spire/boss_overlord_wyrmthalak.cpp5
-rw-r--r--src/scripts/eastern_kingdoms/deadmines/instance_deadmines.cpp101
-rw-r--r--src/scripts/eastern_kingdoms/molten_core/boss_ragnaros.cpp2
-rw-r--r--src/scripts/eastern_kingdoms/scarlet_enclave/chapter1.cpp15
-rw-r--r--src/scripts/eastern_kingdoms/scholomance/boss_darkmaster_gandling.cpp3
-rw-r--r--src/scripts/eastern_kingdoms/stratholme/boss_baron_rivendare.cpp3
-rw-r--r--src/scripts/eastern_kingdoms/sunken_temple/instance_sunken_temple.cpp94
-rw-r--r--src/scripts/eastern_kingdoms/sunwell_plateau/boss_brutallus.cpp15
-rw-r--r--src/scripts/eastern_kingdoms/sunwell_plateau/boss_kiljaeden.cpp72
-rw-r--r--src/scripts/eastern_kingdoms/sunwell_plateau/boss_muru.cpp1
-rw-r--r--src/scripts/eastern_kingdoms/zulaman/boss_hexlord.cpp2
-rw-r--r--src/scripts/eastern_kingdoms/zulgurub/boss_arlokk.cpp22
-rw-r--r--src/scripts/eastern_kingdoms/zulgurub/boss_hazzarah.cpp3
-rw-r--r--src/scripts/eastern_kingdoms/zulgurub/boss_marli.cpp5
17 files changed, 169 insertions, 183 deletions
diff --git a/src/scripts/eastern_kingdoms/blackrock_depths/boss_moira_bronzebeard.cpp b/src/scripts/eastern_kingdoms/blackrock_depths/boss_moira_bronzebeard.cpp
index 570fdb086a7..a24d7a4d25d 100644
--- a/src/scripts/eastern_kingdoms/blackrock_depths/boss_moira_bronzebeard.cpp
+++ b/src/scripts/eastern_kingdoms/blackrock_depths/boss_moira_bronzebeard.cpp
@@ -41,13 +41,9 @@ struct boss_moira_bronzebeardAI : public ScriptedAI
uint32 MindBlast_Timer;
uint32 ShadowWordPain_Timer;
uint32 Smite_Timer;
- Unit* PlayerHolder;
- Unit* Target;
- bool Heal;
void Reset()
{
- Target = NULL;
Heal_Timer = 12000; //These times are probably wrong
MindBlast_Timer = 16000;
ShadowWordPain_Timer = 2000;
diff --git a/src/scripts/eastern_kingdoms/blackrock_depths/boss_tomb_of_seven.cpp b/src/scripts/eastern_kingdoms/blackrock_depths/boss_tomb_of_seven.cpp
index 44417bf1579..9914d0a282b 100644
--- a/src/scripts/eastern_kingdoms/blackrock_depths/boss_tomb_of_seven.cpp
+++ b/src/scripts/eastern_kingdoms/blackrock_depths/boss_tomb_of_seven.cpp
@@ -107,10 +107,6 @@ struct boss_doomrelAI : public ScriptedAI
uint32 CurseOfWeakness_Timer;
uint32 DemonArmor_Timer;
bool Voidwalkers;
- int Rand;
- int RandX;
- int RandY;
- Creature* Summoned;
void Reset()
{
diff --git a/src/scripts/eastern_kingdoms/blackrock_spire/boss_gyth.cpp b/src/scripts/eastern_kingdoms/blackrock_spire/boss_gyth.cpp
index 60885cc4de4..2f3858626b5 100644
--- a/src/scripts/eastern_kingdoms/blackrock_spire/boss_gyth.cpp
+++ b/src/scripts/eastern_kingdoms/blackrock_spire/boss_gyth.cpp
@@ -46,7 +46,6 @@ struct boss_gythAI : public ScriptedAI
bool SummonedRend;
bool bAggro;
bool RootSelf;
- Creature *SummonedCreature;
void Reset()
{
diff --git a/src/scripts/eastern_kingdoms/blackrock_spire/boss_overlord_wyrmthalak.cpp b/src/scripts/eastern_kingdoms/blackrock_spire/boss_overlord_wyrmthalak.cpp
index 1032dc06c78..548df0e314c 100644
--- a/src/scripts/eastern_kingdoms/blackrock_spire/boss_overlord_wyrmthalak.cpp
+++ b/src/scripts/eastern_kingdoms/blackrock_spire/boss_overlord_wyrmthalak.cpp
@@ -47,7 +47,6 @@ struct boss_overlordwyrmthalakAI : public ScriptedAI
uint32 Cleave_Timer;
uint32 Knockaway_Timer;
bool Summoned;
- Creature *SummonedCreature;
void Reset()
{
@@ -101,9 +100,9 @@ struct boss_overlordwyrmthalakAI : public ScriptedAI
{
Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM,0, 100, true);
- if (SummonedCreature = m_creature->SummonCreature(9216,ADD_1X,ADD_1Y,ADD_1Z,ADD_1O,TEMPSUMMON_TIMED_DESPAWN,300000))
+ if (Creature *SummonedCreature = m_creature->SummonCreature(9216,ADD_1X,ADD_1Y,ADD_1Z,ADD_1O,TEMPSUMMON_TIMED_DESPAWN,300000))
SummonedCreature->AI()->AttackStart(pTarget);
- if (SummonedCreature = m_creature->SummonCreature(9268,ADD_2X,ADD_2Y,ADD_2Z,ADD_2O,TEMPSUMMON_TIMED_DESPAWN,300000))
+ if (Creature *SummonedCreature = m_creature->SummonCreature(9268,ADD_2X,ADD_2Y,ADD_2Z,ADD_2O,TEMPSUMMON_TIMED_DESPAWN,300000))
SummonedCreature->AI()->AttackStart(pTarget);
Summoned = true;
}
diff --git a/src/scripts/eastern_kingdoms/deadmines/instance_deadmines.cpp b/src/scripts/eastern_kingdoms/deadmines/instance_deadmines.cpp
index 1da65ed611a..84b79a1dd41 100644
--- a/src/scripts/eastern_kingdoms/deadmines/instance_deadmines.cpp
+++ b/src/scripts/eastern_kingdoms/deadmines/instance_deadmines.cpp
@@ -45,12 +45,13 @@ struct instance_deadmines : public ScriptedInstance
{
instance_deadmines(Map* pMap) : ScriptedInstance(pMap) { Initialize(); };
- GameObject* IronCladDoor;
- GameObject* DefiasCannon;
- GameObject* DoorLever;
- Creature* DefiasPirate1;
- Creature* DefiasPirate2;
- Creature* DefiasCompanion;
+ uint64 IronCladDoorGUID;
+ uint64 DefiasCannonGUID;
+ uint64 DoorLeverGUID;
+ uint64 DefiasPirate1GUID;
+ uint64 DefiasPirate2GUID;
+ uint64 DefiasCompanionGUID;
+
uint32 State;
uint32 CannonBlast_Timer;
uint32 PiratesDelay_Timer;
@@ -58,16 +59,24 @@ struct instance_deadmines : public ScriptedInstance
void Initialize()
{
- IronCladDoor = NULL;
- DefiasCannon = NULL;
- DoorLever = NULL;
+ IronCladDoorGUID = 0;
+ DefiasCannonGUID = 0;
+ DoorLeverGUID = 0;
+ DefiasPirate1GUID = 0;
+ DefiasPirate2GUID = 0;
+ DefiasCompanionGUID = 0;
+
State = CANNON_NOT_USED;
uiSmiteChestGUID = 0;
}
virtual void Update(uint32 diff)
{
- if (!IronCladDoor || !DefiasCannon || !DoorLever)
+ if (!IronCladDoorGUID || !DefiasCannonGUID || !DoorLeverGUID)
+ return;
+
+ GameObject *pIronCladDoor = instance->GetGameObject(IronCladDoorGUID);
+ if (!pIronCladDoor)
return;
switch (State)
@@ -75,9 +84,9 @@ struct instance_deadmines : public ScriptedInstance
case CANNON_GUNPOWDER_USED:
CannonBlast_Timer = DATA_CANNON_BLAST_TIMER;
// it's a hack - Mr. Smite should do that but his too far away
- IronCladDoor->SetName("Mr. Smite");
- IronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM1, LANG_UNIVERSAL, 0);
- DoPlaySound(IronCladDoor, SOUND_MR_SMITE_ALARM1);
+ pIronCladDoor->SetName("Mr. Smite");
+ pIronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM1, LANG_UNIVERSAL, 0);
+ DoPlaySound(pIronCladDoor, SOUND_MR_SMITE_ALARM1);
State = CANNON_BLAST_INITIATED;
break;
case CANNON_BLAST_INITIATED:
@@ -88,8 +97,8 @@ struct instance_deadmines : public ScriptedInstance
ShootCannon();
BlastOutDoor();
LeverStucked();
- IronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM2, LANG_UNIVERSAL, 0);
- DoPlaySound(IronCladDoor, SOUND_MR_SMITE_ALARM2);
+ pIronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM2, LANG_UNIVERSAL, 0);
+ DoPlaySound(pIronCladDoor, SOUND_MR_SMITE_ALARM2);
State = PIRATES_ATTACK;
} else CannonBlast_Timer -= diff;
break;
@@ -105,19 +114,32 @@ struct instance_deadmines : public ScriptedInstance
void SummonCreatures()
{
- DefiasPirate1 = IronCladDoor->SummonCreature(657,IronCladDoor->GetPositionX() - 2,IronCladDoor->GetPositionY()-7,IronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
- DefiasPirate2 = IronCladDoor->SummonCreature(657,IronCladDoor->GetPositionX() + 3,IronCladDoor->GetPositionY()-6,IronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
- DefiasCompanion = IronCladDoor->SummonCreature(3450,IronCladDoor->GetPositionX() + 2,IronCladDoor->GetPositionY()-6,IronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
+ if (GameObject *pIronCladDoor = instance->GetGameObject(IronCladDoorGUID))
+ {
+ Creature *DefiasPirate1 = pIronCladDoor->SummonCreature(657,pIronCladDoor->GetPositionX() - 2,pIronCladDoor->GetPositionY()-7,pIronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
+ Creature *DefiasPirate2 = pIronCladDoor->SummonCreature(657,pIronCladDoor->GetPositionX() + 3,pIronCladDoor->GetPositionY()-6,pIronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
+ Creature *DefiasCompanion = pIronCladDoor->SummonCreature(3450,pIronCladDoor->GetPositionX() + 2,pIronCladDoor->GetPositionY()-6,pIronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
+
+ DefiasPirate1GUID = DefiasPirate1->GetGUID();
+ DefiasPirate2GUID = DefiasPirate2->GetGUID();
+ DefiasCompanionGUID = DefiasCompanion->GetGUID();
+ }
}
void MoveCreaturesInside()
{
- if (!DefiasPirate1 || !DefiasPirate2 || !DefiasCompanion)
+ if (!DefiasPirate1GUID || !DefiasPirate2GUID || !DefiasCompanionGUID)
+ return;
+
+ Creature *pDefiasPirate1 = instance->GetCreature(DefiasPirate1GUID);
+ Creature *pDefiasPirate2 = instance->GetCreature(DefiasPirate2GUID);
+ Creature *pDefiasCompanion = instance->GetCreature(DefiasCompanionGUID);
+ if (!pDefiasPirate1 || !pDefiasPirate2 || !pDefiasCompanion)
return;
- MoveCreatureInside(DefiasPirate1);
- MoveCreatureInside(DefiasPirate2);
- MoveCreatureInside(DefiasCompanion);
+ MoveCreatureInside(pDefiasPirate1);
+ MoveCreatureInside(pDefiasPirate2);
+ MoveCreatureInside(pDefiasCompanion);
}
void MoveCreatureInside(Creature* pCreature)
@@ -128,37 +150,36 @@ struct instance_deadmines : public ScriptedInstance
void ShootCannon()
{
- DefiasCannon->SetGoState(GO_STATE_ACTIVE);
- DoPlaySound(DefiasCannon, SOUND_CANNONFIRE);
+ if (GameObject *pDefiasCannon = instance->GetGameObject(DefiasCannonGUID))
+ {
+ pDefiasCannon->SetGoState(GO_STATE_ACTIVE);
+ DoPlaySound(pDefiasCannon, SOUND_CANNONFIRE);
+ }
}
void BlastOutDoor()
{
- IronCladDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
- DoPlaySound(IronCladDoor, SOUND_DESTROYDOOR);
+ if (GameObject *pIronCladDoor = instance->GetGameObject(IronCladDoorGUID))
+ {
+ pIronCladDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
+ DoPlaySound(pIronCladDoor, SOUND_DESTROYDOOR);
+ }
}
void LeverStucked()
{
- DoorLever->SetUInt32Value(GAMEOBJECT_FLAGS, 4);
+ if (GameObject *pDoorLever = instance->GetGameObject(DoorLeverGUID))
+ pDoorLever->SetUInt32Value(GAMEOBJECT_FLAGS, 4);
}
void OnGameObjectCreate(GameObject* pGo, bool add)
{
switch(pGo->GetEntry())
{
- case GO_IRONCLAD_DOOR:
- IronCladDoor = pGo;
- break;
- case GO_DEFIAS_CANNON:
- DefiasCannon = pGo;
- break;
- case GO_DOOR_LEVER:
- DoorLever = pGo;
- break;
- case GO_MR_SMITE_CHEST:
- uiSmiteChestGUID = pGo->GetGUID();
- break;
+ case GO_IRONCLAD_DOOR: IronCladDoorGUID = pGo->GetGUID(); break;
+ case GO_DEFIAS_CANNON: DefiasCannonGUID = pGo->GetGUID(); break;
+ case GO_DOOR_LEVER: DoorLeverGUID = pGo->GetGUID(); break;
+ case GO_MR_SMITE_CHEST: uiSmiteChestGUID = pGo->GetGUID(); break;
}
}
@@ -166,7 +187,7 @@ struct instance_deadmines : public ScriptedInstance
{
if (type == EVENT_STATE)
{
- if (DefiasCannon && IronCladDoor)
+ if (DefiasCannonGUID && IronCladDoorGUID)
State=data;
}
}
diff --git a/src/scripts/eastern_kingdoms/molten_core/boss_ragnaros.cpp b/src/scripts/eastern_kingdoms/molten_core/boss_ragnaros.cpp
index 3195ad82591..ba2673290b5 100644
--- a/src/scripts/eastern_kingdoms/molten_core/boss_ragnaros.cpp
+++ b/src/scripts/eastern_kingdoms/molten_core/boss_ragnaros.cpp
@@ -98,7 +98,7 @@ struct boss_ragnarosAI : public ScriptedAI
uint32 Erruption_Timer;
uint32 Submerge_Timer;
uint32 Attack_Timer;
- Creature *Summoned;
+
bool HasYelledMagmaBurst;
bool HasSubmergedOnce;
bool WasBanished;
diff --git a/src/scripts/eastern_kingdoms/scarlet_enclave/chapter1.cpp b/src/scripts/eastern_kingdoms/scarlet_enclave/chapter1.cpp
index 4cd94ab8578..9ae7d602ffc 100644
--- a/src/scripts/eastern_kingdoms/scarlet_enclave/chapter1.cpp
+++ b/src/scripts/eastern_kingdoms/scarlet_enclave/chapter1.cpp
@@ -499,19 +499,19 @@ struct npc_dark_rider_of_acherusAI : public ScriptedAI
uint32 PhaseTimer;
uint32 Phase;
bool Intro;
- Unit *Target;
+ uint64 TargetGUID;
void Reset()
{
PhaseTimer = 4000;
Phase = 0;
Intro = false;
- Target = NULL;
+ TargetGUID = 0;
}
void UpdateAI(const uint32 diff)
{
- if (!Intro)
+ if (!Intro || !TargetGUID)
return;
if (PhaseTimer <= diff)
@@ -524,7 +524,8 @@ struct npc_dark_rider_of_acherusAI : public ScriptedAI
Phase = 1;
break;
case 1:
- DoCast(Target, DESPAWN_HORSE, true);
+ if (Unit *pTarget = Unit::GetUnit(*m_creature, TargetGUID))
+ DoCast(pTarget, DESPAWN_HORSE, true);
PhaseTimer = 3000;
Phase = 2;
break;
@@ -548,11 +549,11 @@ struct npc_dark_rider_of_acherusAI : public ScriptedAI
if (!who)
return;
- Target = who;
+ TargetGUID = who->GetGUID();
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
m_creature->SetSpeed(MOVE_RUN, 0.4f);
- m_creature->GetMotionMaster()->MoveChase(Target);
- m_creature->SetUInt64Value(UNIT_FIELD_TARGET, Target->GetGUID());
+ m_creature->GetMotionMaster()->MoveChase(who);
+ m_creature->SetUInt64Value(UNIT_FIELD_TARGET, TargetGUID);
Intro = true;
}
diff --git a/src/scripts/eastern_kingdoms/scholomance/boss_darkmaster_gandling.cpp b/src/scripts/eastern_kingdoms/scholomance/boss_darkmaster_gandling.cpp
index a1543413ef5..11578a07a83 100644
--- a/src/scripts/eastern_kingdoms/scholomance/boss_darkmaster_gandling.cpp
+++ b/src/scripts/eastern_kingdoms/scholomance/boss_darkmaster_gandling.cpp
@@ -62,8 +62,6 @@ struct boss_darkmaster_gandlingAI : public ScriptedAI
uint32 Curse_Timer;
uint32 Teleport_Timer;
- Creature *Summoned;
-
void Reset()
{
ArcaneMissiles_Timer = 4500;
@@ -121,6 +119,7 @@ struct boss_darkmaster_gandlingAI : public ScriptedAI
if (DoGetThreat(pTarget))
DoModifyThreatPercent(pTarget, -100);
+ Creature *Summoned = NULL;
switch(rand()%6)
{
case 0:
diff --git a/src/scripts/eastern_kingdoms/stratholme/boss_baron_rivendare.cpp b/src/scripts/eastern_kingdoms/stratholme/boss_baron_rivendare.cpp
index 4fd3e6c9b9e..dd83e3cbc5f 100644
--- a/src/scripts/eastern_kingdoms/stratholme/boss_baron_rivendare.cpp
+++ b/src/scripts/eastern_kingdoms/stratholme/boss_baron_rivendare.cpp
@@ -89,7 +89,6 @@ struct boss_baron_rivendareAI : public ScriptedAI
uint32 MortalStrike_Timer;
// uint32 RaiseDead_Timer;
uint32 SummonSkeletons_Timer;
- Creature *Summoned;
void Reset()
{
@@ -112,7 +111,7 @@ struct boss_baron_rivendareAI : public ScriptedAI
void JustSummoned(Creature* summoned)
{
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
- summoned->AI()->AttackStart(pTarget);
+ summoned->AI()->AttackStart(pTarget);
}
void JustDied(Unit* Killer)
diff --git a/src/scripts/eastern_kingdoms/sunken_temple/instance_sunken_temple.cpp b/src/scripts/eastern_kingdoms/sunken_temple/instance_sunken_temple.cpp
index be4c5901ebc..6d040ed4885 100644
--- a/src/scripts/eastern_kingdoms/sunken_temple/instance_sunken_temple.cpp
+++ b/src/scripts/eastern_kingdoms/sunken_temple/instance_sunken_temple.cpp
@@ -44,14 +44,6 @@ struct instance_sunken_temple : public ScriptedInstance
Initialize();
};
- GameObject* AtalaiStatue1;
- GameObject* AtalaiStatue2;
- GameObject* AtalaiStatue3;
- GameObject* AtalaiStatue4;
- GameObject* AtalaiStatue5;
- GameObject* AtalaiStatue6;
- GameObject* AtalaiIdol;
-
uint64 GOAtalaiStatue1;
uint64 GOAtalaiStatue2;
uint64 GOAtalaiStatue3;
@@ -59,6 +51,7 @@ struct instance_sunken_temple : public ScriptedInstance
uint64 GOAtalaiStatue5;
uint64 GOAtalaiStatue6;
uint64 GOAtalaiIdol;
+
uint32 State;
bool s1;
@@ -77,14 +70,9 @@ struct instance_sunken_temple : public ScriptedInstance
GOAtalaiStatue5 = 0;
GOAtalaiStatue6 = 0;
GOAtalaiIdol = 0;
+
State = 0;
- AtalaiStatue1 = NULL;
- AtalaiStatue2 = NULL;
- AtalaiStatue3 = NULL;
- AtalaiStatue4 = NULL;
- AtalaiStatue5 = NULL;
- AtalaiStatue6 = NULL;
- AtalaiIdol = NULL;
+
s1 = false;
s2 = false;
s3 = false;
@@ -94,39 +82,18 @@ struct instance_sunken_temple : public ScriptedInstance
}
void OnGameObjectCreate(GameObject* pGo, bool add)
- {
- switch(pGo->GetEntry())
- {
- case GO_ATALAI_STATUE1:
- AtalaiStatue1 = pGo;
- GOAtalaiStatue1 = pGo->GetGUID();
- break;
- case GO_ATALAI_STATUE2:
- AtalaiStatue2 = pGo;
- GOAtalaiStatue2 = pGo->GetGUID();
- break;
- case GO_ATALAI_STATUE3:
- AtalaiStatue3 = pGo;
- GOAtalaiStatue3 = pGo->GetGUID();
- break;
- case GO_ATALAI_STATUE4:
- AtalaiStatue4 = pGo;
- GOAtalaiStatue4 = pGo->GetGUID();
- break;
- case GO_ATALAI_STATUE5:
- AtalaiStatue5 = pGo;
- GOAtalaiStatue5 = pGo->GetGUID();
- break;
- case GO_ATALAI_STATUE6:
- AtalaiStatue6 = pGo;
- GOAtalaiStatue6 = pGo->GetGUID();
- break;
- case GO_ATALAI_IDOL:
- AtalaiIdol = pGo;
- GOAtalaiIdol = pGo->GetGUID();
- break;
- }
- };
+ {
+ switch(pGo->GetEntry())
+ {
+ case GO_ATALAI_STATUE1: GOAtalaiStatue1 = pGo->GetGUID(); break;
+ case GO_ATALAI_STATUE2: GOAtalaiStatue2 = pGo->GetGUID(); break;
+ case GO_ATALAI_STATUE3: GOAtalaiStatue3 = pGo->GetGUID(); break;
+ case GO_ATALAI_STATUE4: GOAtalaiStatue4 = pGo->GetGUID(); break;
+ case GO_ATALAI_STATUE5: GOAtalaiStatue5 = pGo->GetGUID(); break;
+ case GO_ATALAI_STATUE6: GOAtalaiStatue6 = pGo->GetGUID(); break;
+ case GO_ATALAI_IDOL: GOAtalaiIdol = pGo->GetGUID(); break;
+ }
+ }
virtual void Update(uint32 diff) // correct order goes form 1-6
{
@@ -135,7 +102,8 @@ struct instance_sunken_temple : public ScriptedInstance
case GO_ATALAI_STATUE1:
if(!s1 && !s2 && !s3 && !s4 && !s5 && !s6)
{
- UseStatue(AtalaiStatue1);
+ if (GameObject *pAtalaiStatue1 = instance->GetGameObject(GOAtalaiStatue1))
+ UseStatue(pAtalaiStatue1);
s1 = true;
State = 0;
};
@@ -143,7 +111,8 @@ struct instance_sunken_temple : public ScriptedInstance
case GO_ATALAI_STATUE2:
if(s1 && !s2 && !s3 && !s4 && !s5 && !s6)
{
- UseStatue(AtalaiStatue2);
+ if (GameObject *pAtalaiStatue2 = instance->GetGameObject(GOAtalaiStatue2))
+ UseStatue(pAtalaiStatue2);
s2 = true;
State = 0;
};
@@ -151,7 +120,8 @@ struct instance_sunken_temple : public ScriptedInstance
case GO_ATALAI_STATUE3:
if(s1 && s2 && !s3 && !s4 && !s5 && !s6)
{
- UseStatue(AtalaiStatue3);
+ if (GameObject *pAtalaiStatue3 = instance->GetGameObject(GOAtalaiStatue3))
+ UseStatue(pAtalaiStatue3);
s3 = true;
State = 0;
};
@@ -159,7 +129,8 @@ struct instance_sunken_temple : public ScriptedInstance
case GO_ATALAI_STATUE4:
if(s1 && s2 && s3 && !s4 && !s5 && !s6)
{
- UseStatue(AtalaiStatue4);
+ if (GameObject *pAtalaiStatue4 = instance->GetGameObject(GOAtalaiStatue4))
+ UseStatue(pAtalaiStatue4);
s4 = true;
State = 0;
}
@@ -167,7 +138,8 @@ struct instance_sunken_temple : public ScriptedInstance
case GO_ATALAI_STATUE5:
if(s1 && s2 && s3 && s4 && !s5 && !s6)
{
- UseStatue(AtalaiStatue5);
+ if (GameObject *pAtalaiStatue5 = instance->GetGameObject(GOAtalaiStatue5))
+ UseStatue(pAtalaiStatue5);
s5 = true;
State = 0;
}
@@ -175,7 +147,8 @@ struct instance_sunken_temple : public ScriptedInstance
case GO_ATALAI_STATUE6:
if(s1 && s2 && s3 && s4 && s5 && !s6)
{
- UseLastStatue(AtalaiStatue6);
+ if (GameObject *pAtalaiStatue6 = instance->GetGameObject(GOAtalaiStatue6))
+ UseStatue(pAtalaiStatue6);
s6 = true;
State = 0;
}
@@ -183,11 +156,13 @@ struct instance_sunken_temple : public ScriptedInstance
}
};
- void UseStatue(GameObject* pGo)
- {
- pGo->SummonGameObject(GO_ATALAI_LIGHT1,pGo->GetPositionX(),pGo->GetPositionY(),pGo->GetPositionZ(),0,0,0,0,0,0);
- pGo->SetUInt32Value(GAMEOBJECT_FLAGS, 4);
- }
+ void UseStatue(GameObject* pGo)
+ {
+ pGo->SummonGameObject(GO_ATALAI_LIGHT1,pGo->GetPositionX(),pGo->GetPositionY(),pGo->GetPositionZ(),0,0,0,0,0,0);
+ pGo->SetUInt32Value(GAMEOBJECT_FLAGS, 4);
+ }
+
+ /*
void UseLastStatue(GameObject* pGo)
{
AtalaiStatue1->SummonGameObject(GO_ATALAI_LIGHT2,AtalaiStatue1->GetPositionX(),AtalaiStatue1->GetPositionY(),AtalaiStatue1->GetPositionZ(),0,0,0,0,0,100000);
@@ -198,6 +173,7 @@ struct instance_sunken_temple : public ScriptedInstance
AtalaiStatue6->SummonGameObject(GO_ATALAI_LIGHT2,AtalaiStatue6->GetPositionX(),AtalaiStatue6->GetPositionY(),AtalaiStatue6->GetPositionZ(),0,0,0,0,0,100000);
pGo->SummonGameObject(148838,-488.997,96.61,-189.019,-1.52,0,0,0,0,100000);
}
+ */
void SetData(uint32 type, uint32 data)
{
diff --git a/src/scripts/eastern_kingdoms/sunwell_plateau/boss_brutallus.cpp b/src/scripts/eastern_kingdoms/sunwell_plateau/boss_brutallus.cpp
index 1f0b1e3a57e..b434ef5c3b4 100644
--- a/src/scripts/eastern_kingdoms/sunwell_plateau/boss_brutallus.cpp
+++ b/src/scripts/eastern_kingdoms/sunwell_plateau/boss_brutallus.cpp
@@ -73,7 +73,6 @@ struct boss_brutallusAI : public ScriptedAI
}
ScriptedInstance* pInstance;
- Unit* Madrigosa;
uint32 SlashTimer;
uint32 BurnTimer;
@@ -102,8 +101,6 @@ struct boss_brutallusAI : public ScriptedAI
IsIntro = false;
Enraged = false;
-
-
DoCast(m_creature, SPELL_DUAL_WIELD, true);
if (pInstance)
@@ -142,17 +139,15 @@ struct boss_brutallusAI : public ScriptedAI
ScriptedAI::EnterEvadeMode();
}
-
-
void StartIntro()
{
if (!Intro || IsIntro)
return;
error_log("Start Intro");
- Madrigosa = Unit::GetUnit(*m_creature, pInstance->GetData64(DATA_MADRIGOSA));
+ Creature *Madrigosa = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_MADRIGOSA) : 0);
if (Madrigosa)
{
- ((Creature*)Madrigosa)->Respawn();
+ Madrigosa->Respawn();
Madrigosa->setActive(true);
IsIntro = true;
Madrigosa->SetMaxHealth(m_creature->GetMaxHealth());
@@ -166,7 +161,6 @@ struct boss_brutallusAI : public ScriptedAI
error_log("Madrigosa was not found");
EndIntro();
}
-
}
void EndIntro()
@@ -186,6 +180,7 @@ struct boss_brutallusAI : public ScriptedAI
void DoIntro()
{
+ Creature *Madrigosa = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_MADRIGOSA) : 0);
if (!Madrigosa)
return;
@@ -286,13 +281,15 @@ struct boss_brutallusAI : public ScriptedAI
{
if (IntroFrostBoltTimer <= diff)
{
- if (Madrigosa)
+ if (Creature *Madrigosa = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_MADRIGOSA) : 0))
{
Madrigosa->CastSpell(m_creature, SPELL_INTRO_FROSTBOLT, true);
IntroFrostBoltTimer = 2000;
}
} else IntroFrostBoltTimer -= diff;
}
+ if (!UpdateVictim())
+ return;
DoMeleeAttackIfReady();
}
diff --git a/src/scripts/eastern_kingdoms/sunwell_plateau/boss_kiljaeden.cpp b/src/scripts/eastern_kingdoms/sunwell_plateau/boss_kiljaeden.cpp
index 87291ae807a..1b8d51be960 100644
--- a/src/scripts/eastern_kingdoms/sunwell_plateau/boss_kiljaeden.cpp
+++ b/src/scripts/eastern_kingdoms/sunwell_plateau/boss_kiljaeden.cpp
@@ -307,7 +307,7 @@ struct boss_kalecgos_kjAI : public ScriptedAI
pInstance = c->GetInstanceData();
}
- GameObject* Orb[4];
+ uint64 OrbGUID[4];
ScriptedInstance* pInstance;
uint8 OrbsEmpowered;
uint8 EmpowerCount;
@@ -316,7 +316,7 @@ struct boss_kalecgos_kjAI : public ScriptedAI
void InitializeAI(){
for (uint8 i = 0; i < 4; ++i)
- Orb[i] = NULL;
+ OrbGUID[i] = 0;
FindOrbs();
OrbsEmpowered = 0;
EmpowerCount = 0;
@@ -347,8 +347,8 @@ struct boss_kalecgos_kjAI : public ScriptedAI
return;
uint8 i = 0;
- for (std::list<GameObject*>::iterator itr = orbList.begin(); itr != orbList.end(); ++itr, ++i){
- Orb[i] = pInstance ? pInstance->instance->GetGameObject(pInstance->GetData64((*itr)->GetGUID())) : NULL;
+ for (std::list<GameObject*>::const_iterator itr = orbList.begin(); itr != orbList.end(); ++itr, ++i){
+ OrbGUID[i] = pInstance ? (*itr)->GetGUID() : 0;
}
}
@@ -356,24 +356,29 @@ struct boss_kalecgos_kjAI : public ScriptedAI
{
m_creature->RemoveDynObject(SPELL_RING_OF_BLUE_FLAMES);
for (uint8 i = 0; i < 4; ++i)
- if (Orb[i]) Orb[i]->SetUInt32Value(GAMEOBJECT_FACTION, 0);
+ if (GameObject *pOrb = m_creature->GetMap()->GetGameObject(OrbGUID[i]))
+ pOrb->SetUInt32Value(GAMEOBJECT_FACTION, 0);
}
void EmpowerOrb(bool all)
{
- if (!Orb[OrbsEmpowered])
+ if (!OrbGUID[OrbsEmpowered])
return;
+
uint8 random = urand(0,3);
if (all)
{
m_creature->RemoveDynObject(SPELL_RING_OF_BLUE_FLAMES);
for (uint8 i = 0; i < 4; ++i)
{
- if (!Orb[i]) return;
- Orb[i]->CastSpell(m_creature, SPELL_RING_OF_BLUE_FLAMES);
- Orb[i]->SetUInt32Value(GAMEOBJECT_FACTION, 35);
- Orb[i]->setActive(true);
- Orb[i]->Refresh();
+ GameObject *pOrb = m_creature->GetMap()->GetGameObject(OrbGUID[i]);
+ if (!pOrb)
+ return;
+
+ pOrb->CastSpell(m_creature, SPELL_RING_OF_BLUE_FLAMES);
+ pOrb->SetUInt32Value(GAMEOBJECT_FACTION, 35);
+ pOrb->setActive(true);
+ pOrb->Refresh();
}
}
else
@@ -392,12 +397,15 @@ struct boss_kalecgos_kjAI : public ScriptedAI
}
}
}*/
- if(Orb[random])
+ if(OrbGUID[random])
{
- Orb[random]->CastSpell(m_creature, SPELL_RING_OF_BLUE_FLAMES);
- Orb[random]->SetUInt32Value(GAMEOBJECT_FACTION, 35);
- Orb[random]->setActive(true);
- Orb[random]->Refresh();
+ if (GameObject* pOrb = m_creature->GetMap()->GetGameObject(OrbGUID[random]))
+ {
+ pOrb->CastSpell(m_creature, SPELL_RING_OF_BLUE_FLAMES);
+ pOrb->SetUInt32Value(GAMEOBJECT_FACTION, 35);
+ pOrb->setActive(true);
+ pOrb->Refresh();
+ }
}
++OrbsEmpowered;
}
@@ -440,8 +448,6 @@ struct boss_kiljaedenAI : public Scripted_NoMovementAI
ScriptedInstance* pInstance;
SummonList Summons;
- Creature* Kalec;
- Unit* randomPlayer;
uint8 Phase;
uint8 ActiveTimers;
@@ -486,8 +492,6 @@ struct boss_kiljaedenAI : public Scripted_NoMovementAI
IsWaiting = false;
OrbActivated = false;
- if(pInstance)
- Kalec = CAST_CRE(Unit::GetUnit(*m_creature, pInstance->GetData64(DATA_KALECGOS_KJ)));
ChangeTimers(false, 0);
}
@@ -595,9 +599,9 @@ struct boss_kiljaedenAI : public Scripted_NoMovementAI
switch(t)
{
case TIMER_KALEC_JOIN:
- if (Kalec)
+ if (Creature *pKalec = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_KALECGOS_KJ) : 0))
{
- DoScriptText(SAY_KALECGOS_JOIN, Kalec);
+ DoScriptText(SAY_KALECGOS_JOIN, pKalec);
IsKalecJoined = true;
TimerIsDeactiveted[TIMER_KALEC_JOIN] = true;
}
@@ -613,14 +617,15 @@ struct boss_kiljaedenAI : public Scripted_NoMovementAI
case TIMER_LEGION_LIGHTNING:
if (!m_creature->IsNonMeleeSpellCasted(false))
{
+ Unit *RandomPlayer;
m_creature->RemoveAurasDueToSpell(SPELL_SOUL_FLAY);
for (uint8 z = 0; z < 6; ++z)
{
- randomPlayer = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
- if (!randomPlayer->HasAura(SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT,0)) break;
+ RandomPlayer = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
+ if (RandomPlayer && !RandomPlayer->HasAura(SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT,0)) break;
}
- if (randomPlayer)
- DoCast(randomPlayer, SPELL_LEGION_LIGHTNING, false);
+ if (RandomPlayer)
+ DoCast(RandomPlayer, SPELL_LEGION_LIGHTNING, false);
else
error_log("try to cast SPELL_LEGION_LIGHTNING on invalid target");
Timer[TIMER_LEGION_LIGHTNING] = (Phase == PHASE_SACRIFICE) ? 18000 : 30000; // 18 seconds in PHASE_SACRIFICE
@@ -686,15 +691,15 @@ struct boss_kiljaedenAI : public Scripted_NoMovementAI
}
break;
case TIMER_ORBS_EMPOWER: //Phase 3
- if (Kalec)
+ if (Creature *pKalec = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_KALECGOS_KJ) : 0))
{
switch (Phase)
{
case PHASE_SACRIFICE:
- CAST_AI(boss_kalecgos_kjAI, Kalec->AI())->EmpowerOrb(true);
+ CAST_AI(boss_kalecgos_kjAI, pKalec->AI())->EmpowerOrb(true);
break;
default:
- CAST_AI(boss_kalecgos_kjAI, Kalec->AI())->EmpowerOrb(false);
+ CAST_AI(boss_kalecgos_kjAI, pKalec->AI())->EmpowerOrb(false);
break;
}
}
@@ -707,7 +712,7 @@ struct boss_kiljaedenAI : public Scripted_NoMovementAI
for (uint8 z = 0; z < 6; ++z)
{
pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
- if (!pTarget->HasAura(SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT,0)) break;
+ if (pTarget && !pTarget->HasAura(SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT,0)) break;
}
if (pTarget)
{
@@ -788,7 +793,6 @@ struct mob_kiljaeden_controllerAI : public Scripted_NoMovementAI
}
ScriptedInstance* pInstance;
- Creature* KalecKJ;
SummonList Summons;
bool SummonedDeceivers;
@@ -800,8 +804,6 @@ struct mob_kiljaeden_controllerAI : public Scripted_NoMovementAI
void InitializeAI()
{
- if(pInstance)
- KalecKJ = Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_KALECGOS_KJ));
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
m_creature->addUnitState(UNIT_STAT_STUNNED);
@@ -812,8 +814,8 @@ struct mob_kiljaeden_controllerAI : public Scripted_NoMovementAI
void Reset()
{
Phase = PHASE_DECEIVERS;
- if (KalecKJ)
- CAST_AI(boss_kalecgos_kjAI, KalecKJ->AI())->ResetOrbs();
+ if (Creature *pKalecKJ = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_KALECGOS_KJ) : 0))
+ CAST_AI(boss_kalecgos_kjAI, pKalecKJ->AI())->ResetOrbs();
DeceiverDeathCount = 0;
SummonedDeceivers = false;
KiljaedenDeath = false;
diff --git a/src/scripts/eastern_kingdoms/sunwell_plateau/boss_muru.cpp b/src/scripts/eastern_kingdoms/sunwell_plateau/boss_muru.cpp
index c1b672af831..d7d70fa6919 100644
--- a/src/scripts/eastern_kingdoms/sunwell_plateau/boss_muru.cpp
+++ b/src/scripts/eastern_kingdoms/sunwell_plateau/boss_muru.cpp
@@ -374,7 +374,6 @@ struct npc_muru_portalAI : public Scripted_NoMovementAI
ScriptedInstance* pInstance;
SummonList Summons;
- Creature* Muru;
bool SummonSentinel;
bool InAction;
diff --git a/src/scripts/eastern_kingdoms/zulaman/boss_hexlord.cpp b/src/scripts/eastern_kingdoms/zulaman/boss_hexlord.cpp
index dee092536a9..94eb393f7cc 100644
--- a/src/scripts/eastern_kingdoms/zulaman/boss_hexlord.cpp
+++ b/src/scripts/eastern_kingdoms/zulaman/boss_hexlord.cpp
@@ -224,8 +224,6 @@ struct boss_hex_lord_malacrassAI : public ScriptedAI
uint32 PlayerClass;
- Unit* SoulDrainTarget;
-
void Reset()
{
if (pInstance)
diff --git a/src/scripts/eastern_kingdoms/zulgurub/boss_arlokk.cpp b/src/scripts/eastern_kingdoms/zulgurub/boss_arlokk.cpp
index 27130cf8350..87946d0cac2 100644
--- a/src/scripts/eastern_kingdoms/zulgurub/boss_arlokk.cpp
+++ b/src/scripts/eastern_kingdoms/zulgurub/boss_arlokk.cpp
@@ -77,6 +77,7 @@ struct boss_arlokkAI : public ScriptedAI
uint32 m_uiSummonCount;
Unit* m_pMarkedTarget;
+ uint64 MarkedTargetGUID;
bool m_bIsPhaseTwo;
bool m_bIsVanished;
@@ -96,7 +97,7 @@ struct boss_arlokkAI : public ScriptedAI
m_bIsPhaseTwo = false;
m_bIsVanished = false;
- m_pMarkedTarget = NULL;
+ MarkedTargetGUID = 0;
m_creature->SetDisplayId(MODEL_ID_NORMAL);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -129,8 +130,8 @@ struct boss_arlokkAI : public ScriptedAI
void DoSummonPhanters()
{
- if (m_pMarkedTarget)
- DoScriptText(SAY_FEAST_PANTHER, m_creature, m_pMarkedTarget);
+ if (Unit *pMarkedTarget = Unit::GetUnit(*m_creature, MarkedTargetGUID))
+ DoScriptText(SAY_FEAST_PANTHER, m_creature, pMarkedTarget);
m_creature->SummonCreature(NPC_ZULIAN_PROWLER, -11532.7998, -1649.6734, 41.4800, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
m_creature->SummonCreature(NPC_ZULIAN_PROWLER, -11532.9970, -1606.4840, 41.2979, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
@@ -138,8 +139,8 @@ struct boss_arlokkAI : public ScriptedAI
void JustSummoned(Creature* pSummoned)
{
- if (m_pMarkedTarget)
- pSummoned->AI()->AttackStart(m_pMarkedTarget);
+ if (Unit *pMarkedTarget = Unit::GetUnit(*m_creature, MarkedTargetGUID))
+ pSummoned->AI()->AttackStart(pMarkedTarget);
++m_uiSummonCount;
}
@@ -161,12 +162,15 @@ struct boss_arlokkAI : public ScriptedAI
if (m_uiMark_Timer <= uiDiff)
{
- m_pMarkedTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
+ Unit *pMarkedTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
- if (m_pMarkedTarget)
- DoCast(m_pMarkedTarget, SPELL_MARK);
+ if (pMarkedTarget)
+ {
+ DoCast(pMarkedTarget, SPELL_MARK);
+ MarkedTargetGUID = pMarkedTarget->GetGUID();
+ }
else
- error_log("TSCR: boss_arlokk could not accuire m_pMarkedTarget.");
+ error_log("TSCR: boss_arlokk could not accuire pMarkedTarget.");
m_uiMark_Timer = 15000;
}
diff --git a/src/scripts/eastern_kingdoms/zulgurub/boss_hazzarah.cpp b/src/scripts/eastern_kingdoms/zulgurub/boss_hazzarah.cpp
index 820bd875b3c..e1e0c0788a1 100644
--- a/src/scripts/eastern_kingdoms/zulgurub/boss_hazzarah.cpp
+++ b/src/scripts/eastern_kingdoms/zulgurub/boss_hazzarah.cpp
@@ -34,7 +34,6 @@ struct boss_hazzarahAI : public ScriptedAI
uint32 ManaBurn_Timer;
uint32 Sleep_Timer;
uint32 Illusions_Timer;
- Creature* Illusion;
void Reset()
{
@@ -78,7 +77,7 @@ struct boss_hazzarahAI : public ScriptedAI
if (!pTarget)
return;
- Illusion = m_creature->SummonCreature(15163,pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(),0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,30000);
+ Creature *Illusion = m_creature->SummonCreature(15163,pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(),0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,30000);
if (Illusion)
Illusion->AI()->AttackStart(pTarget);
}
diff --git a/src/scripts/eastern_kingdoms/zulgurub/boss_marli.cpp b/src/scripts/eastern_kingdoms/zulgurub/boss_marli.cpp
index ff57c3c8b1d..7be13a76c45 100644
--- a/src/scripts/eastern_kingdoms/zulgurub/boss_marli.cpp
+++ b/src/scripts/eastern_kingdoms/zulgurub/boss_marli.cpp
@@ -55,7 +55,6 @@ struct boss_marliAI : public ScriptedAI
uint32 Transform_Timer;
uint32 TransformBack_Timer;
- Creature *Spider;
bool Spawned;
bool PhaseTwo;
@@ -112,6 +111,8 @@ struct boss_marliAI : public ScriptedAI
if (!pTarget)
return;
+ Creature *Spider = NULL;
+
Spider = m_creature->SummonCreature(15041,pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if (Spider)
Spider->AI()->AttackStart(pTarget);
@@ -134,7 +135,7 @@ struct boss_marliAI : public ScriptedAI
if (!pTarget)
return;
- Spider = m_creature->SummonCreature(15041,pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ Creature *Spider = m_creature->SummonCreature(15041,pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if (Spider)
Spider->AI()->AttackStart(pTarget);
SpawnSpider_Timer = 12000 + rand()%5000;