*Add some checks to avoid crashes if ScriptedInstance is NULL.

--HG--
branch : trunk
This commit is contained in:
Anubisss
2009-08-22 03:05:26 +02:00
parent 54b15e0d7d
commit a2adb97263
76 changed files with 252 additions and 288 deletions
@@ -46,7 +46,7 @@ EndContentData */
bool GOHello_go_shadowforge_brazier(Player* pPlayer, GameObject* pGo)
{
if (ScriptedInstance* pInstance = (ScriptedInstance*)pGo->GetInstanceData())
if (ScriptedInstance* pInstance = pGo->GetInstanceData())
{
if (pInstance->GetData(TYPE_LYCEUM) == IN_PROGRESS)
pInstance->SetData(TYPE_LYCEUM, DONE);
@@ -91,8 +91,6 @@ uint32 RingBoss[]=
bool AreaTrigger_at_ring_of_law(Player* pPlayer, AreaTriggerEntry *at)
{
ScriptedInstance* pInstance = (pPlayer->GetInstanceData());
if (ScriptedInstance* pInstance = pPlayer->GetInstanceData())
{
if (pInstance->GetData(TYPE_RING_OF_LAW) == IN_PROGRESS || pInstance->GetData(TYPE_RING_OF_LAW) == DONE)
@@ -1192,7 +1190,7 @@ CreatureAI* GetAI_npc_rocknot(Creature* pCreature)
bool ChooseReward_npc_rocknot(Player* pPlayer, Creature* pCreature, const Quest *_Quest, uint32 item)
{
ScriptedInstance* pInstance = (pCreature->GetInstanceData());
ScriptedInstance* pInstance = pCreature->GetInstanceData();
if (!pInstance)
return true;
@@ -196,7 +196,7 @@ struct TRINITY_DLL_DECL instance_deadmines : public ScriptedInstance
bool ItemUse_item_defias_gunpowder(Player* pPlayer, Item* _Item, SpellCastTargets const& targets)
{
ScriptedInstance *pInstance = (pPlayer->GetInstanceData()) ? (pPlayer->GetInstanceData()) : NULL;
ScriptedInstance *pInstance = pPlayer->GetInstanceData();
if (!pInstance)
{
@@ -233,5 +233,3 @@ void AddSC_instance_deadmines()
newscript->pItemUse = &ItemUse_item_defias_gunpowder;
newscript->RegisterSelf();
}
@@ -60,7 +60,7 @@ struct TRINITY_DLL_DECL boss_netherspiteAI : public ScriptedAI
{
boss_netherspiteAI(Creature* c) : ScriptedAI(c)
{
pInstance = ((ScriptedInstance*)c->GetInstanceData());
pInstance = c->GetInstanceData();
for(int i=0; i<3; ++i)
{
@@ -251,7 +251,7 @@ struct TRINITY_DLL_DECL boss_netherspiteAI : public ScriptedAI
void HandleDoors(bool open) // Massive Door switcher
{
if(GameObject *Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GO_MASSIVE_DOOR)))
if(GameObject *Door = GameObject::GetGameObject(*m_creature, pInstance : pInstance->GetData64(DATA_GO_MASSIVE_DOOR) ? 0))
Door->SetGoState(open ? GO_STATE_ACTIVE : GO_STATE_READY);
}
@@ -113,14 +113,14 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
m_creature->setActive(true);
if (pInstance)
{
if (pInstance->GetData(TYPE_NIGHTBANE) == DONE || pInstance->GetData(TYPE_NIGHTBANE) == IN_PROGRESS)
{
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
m_creature->RemoveCorpse();
}
else
{
if (pInstance)
pInstance->SetData(TYPE_NIGHTBANE, NOT_STARTED);
}
@@ -137,10 +137,13 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI
}
void HandleTerraceDoors(bool open)
{
if(pInstance)
{
pInstance->HandleGameObject(pInstance->GetData64(DATA_MASTERS_TERRACE_DOOR_1), open);
pInstance->HandleGameObject(pInstance->GetData64(DATA_MASTERS_TERRACE_DOOR_2), open);
}
}
void EnterCombat(Unit *who)
{
@@ -266,7 +266,7 @@ struct TRINITY_DLL_DECL boss_terestianAI : public ScriptedAI
uint64 KilrekGUID = pInstance->GetData64(DATA_KILREK);
else ERROR_INST_DATA(m_creature);
Creature* Kilrek = (Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_KILREK)));
Creature* Kilrek = Unit::GetCreature(*m_creature, pInstance : pInstance->GetData64(DATA_KILREK) ? 0);
if (SummonKilrek && Kilrek)
{
Kilrek->Respawn();
@@ -325,7 +325,7 @@ CreatureAI* GetAI_npc_barnesAI(Creature* pCreature)
bool GossipHello_npc_barnes(Player* pPlayer, Creature* pCreature)
{
if (ScriptedInstance* pInstance = (ScriptedInstance*)pCreature->GetInstanceData())
if (ScriptedInstance* pInstance = pCreature->GetInstanceData())
{
// Check for death of Moroes and if opera event is not done already
if (pInstance->GetData(TYPE_MOROES) == DONE && pInstance->GetData(TYPE_OPERA) != DONE)
@@ -402,7 +402,7 @@ enum
bool GossipHello_npc_berthold(Player* pPlayer, Creature* pCreature)
{
if (ScriptedInstance* pInstance = (ScriptedInstance*)pCreature->GetInstanceData())
if (ScriptedInstance* pInstance = pCreature->GetInstanceData())
{
// Check if Shade of Aran event is done
if (pInstance->GetData(TYPE_ARAN) == DONE)
@@ -79,7 +79,8 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
{
boss_felblood_kaelthasAI(Creature* c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData(); Heroic = c->GetMap()->IsHeroic();
pInstance = c->GetInstanceData();
Heroic = c->GetMap()->IsHeroic();
}
ScriptedInstance* pInstance;
@@ -372,7 +372,7 @@ struct TRINITY_DLL_DECL boss_priestess_lackey_commonAI : public ScriptedAI
ResetThreatTimer = 5000 + rand()%15000;
// 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 = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_DELRISSA)))
if (Creature* pDelrissa = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_DELRISSA) : 0))
{
if (!pDelrissa->isAlive())
pDelrissa->Respawn();
@@ -326,7 +326,7 @@ struct TRINITY_DLL_DECL mob_fel_crystalAI : public ScriptedAI
void JustDied(Unit* killer)
{
if (ScriptedInstance* pInstance = (m_creature->GetInstanceData()))
if (ScriptedInstance* pInstance = m_creature->GetInstanceData())
{
Creature* Selin = (Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_SELIN)));
if (Selin && Selin->isAlive())
@@ -61,7 +61,7 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
{
boss_vexallusAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData(); Heroic = c->GetMap()->IsHeroic();
pInstance = c->GetInstanceData();
Heroic = c->GetMap()->IsHeroic();
}
@@ -53,12 +53,7 @@ EndScriptData */
struct TRINITY_DLL_DECL boss_majordomoAI : public ScriptedAI
{
boss_majordomoAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
boss_majordomoAI(Creature *c) : ScriptedAI(c) {}
uint32 MagicReflection_Timer;
uint32 DamageReflection_Timer;
@@ -37,17 +37,13 @@ EndScriptData */
struct TRINITY_DLL_DECL boss_sulfuronAI : public ScriptedAI
{
boss_sulfuronAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
boss_sulfuronAI(Creature *c) : ScriptedAI(c) {}
uint32 Darkstrike_Timer;
uint32 DemoralizingShout_Timer;
uint32 Inspire_Timer;
uint32 Knockdown_Timer;
uint32 Flamespear_Timer;
ScriptedInstance *pInstance;
void Reset()
{
@@ -124,17 +120,12 @@ struct TRINITY_DLL_DECL boss_sulfuronAI : public ScriptedAI
struct TRINITY_DLL_DECL mob_flamewaker_priestAI : public ScriptedAI
{
mob_flamewaker_priestAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
mob_flamewaker_priestAI(Creature *c) : ScriptedAI(c) {}
uint32 Heal_Timer;
uint32 ShadowWordPain_Timer;
uint32 Immolate_Timer;
ScriptedInstance *pInstance;
void Reset()
{
Heal_Timer = 15000+rand()%15000;
@@ -393,7 +393,7 @@ struct TRINITY_DLL_DECL boss_headless_horsemanAI : public ScriptedAI
}
if (pInstance)
pInstance->SetData(DATA_HORSEMAN_EVENT, 0);
pInstance->SetData(DATA_HORSEMAN_EVENT, NOT_STARTED);
}
void FlyMode()
@@ -50,7 +50,7 @@ struct TRINITY_DLL_DECL boss_theolenkrastinovAI : public ScriptedAI
void JustDied(Unit* pKiller)
{
ScriptedInstance* pInstance = (m_creature->GetInstanceData()) ? (m_creature->GetInstanceData()) : NULL;
ScriptedInstance* pInstance = m_creature->GetInstanceData();
if (pInstance)
{
pInstance->SetData(DATA_DOCTORTHEOLENKRASTINOV_DEATH, 0);
@@ -48,7 +48,7 @@ struct TRINITY_DLL_DECL boss_illuciabarovAI : public ScriptedAI
void JustDied(Unit *killer)
{
ScriptedInstance *pInstance = (m_creature->GetInstanceData()) ? (m_creature->GetInstanceData()) : NULL;
ScriptedInstance *pInstance = m_creature->GetInstanceData();
if (pInstance)
{
pInstance->SetData(DATA_LADYILLUCIABAROV_DEATH, 0);
@@ -55,7 +55,7 @@ struct TRINITY_DLL_DECL boss_instructormaliciaAI : public ScriptedAI
void JustDied(Unit *killer)
{
ScriptedInstance *pInstance = (m_creature->GetInstanceData()) ? (m_creature->GetInstanceData()) : NULL;
ScriptedInstance *pInstance = m_creature->GetInstanceData();
if (pInstance)
{
pInstance->SetData(DATA_INSTRUCTORMALICIA_DEATH, 0);
@@ -44,7 +44,7 @@ struct TRINITY_DLL_DECL boss_lordalexeibarovAI : public ScriptedAI
void JustDied(Unit *killer)
{
ScriptedInstance *pInstance = (m_creature->GetInstanceData()) ? (m_creature->GetInstanceData()) : NULL;
ScriptedInstance *pInstance = m_creature->GetInstanceData();
if (pInstance)
{
pInstance->SetData(DATA_LORDALEXEIBAROV_DEATH, 0);
@@ -48,7 +48,7 @@ struct TRINITY_DLL_DECL boss_lorekeeperpolkeltAI : public ScriptedAI
void JustDied(Unit *killer)
{
ScriptedInstance *pInstance = (m_creature->GetInstanceData()) ? (m_creature->GetInstanceData()) : NULL;
ScriptedInstance *pInstance = m_creature->GetInstanceData();
if (pInstance)
{
pInstance->SetData(DATA_LOREKEEPERPOLKELT_DEATH, 0);
@@ -50,7 +50,7 @@ struct TRINITY_DLL_DECL boss_theravenianAI : public ScriptedAI
void JustDied(Unit *killer)
{
ScriptedInstance *pInstance = (m_creature->GetInstanceData()) ? (m_creature->GetInstanceData()) : NULL;
ScriptedInstance *pInstance = m_creature->GetInstanceData();
if (pInstance)
{
pInstance->SetData(DATA_THERAVENIAN_DEATH, 0);
@@ -107,7 +107,7 @@ CreatureAI* GetAI_npc_shadowfang_prisoner(Creature* pCreature)
bool GossipHello_npc_shadowfang_prisoner(Player* pPlayer, Creature* pCreature)
{
ScriptedInstance* pInstance = (pCreature->GetInstanceData());
ScriptedInstance* pInstance = pCreature->GetInstanceData();
if (pInstance && pInstance->GetData(TYPE_FREE_NPC) != DONE && pInstance->GetData(TYPE_RETHILGORE) == DONE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_DOOR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
@@ -34,12 +34,7 @@ EndScriptData */
struct TRINITY_DLL_DECL boss_magistrate_barthilasAI : public ScriptedAI
{
boss_magistrate_barthilasAI(Creature *c) : ScriptedAI(c)
{
pInstance = m_creature->GetInstanceData();
}
ScriptedInstance* pInstance;
boss_magistrate_barthilasAI(Creature *c) : ScriptedAI(c) {}
uint32 DrainingBlow_Timer;
uint32 CrowdPummel_Timer;
@@ -66,7 +66,8 @@ enum Spells
struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI
{
boss_brutallusAI(Creature *c) : ScriptedAI(c){
boss_brutallusAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
@@ -141,7 +142,8 @@ struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI
{
DoScriptText(YELL_DEATH, m_creature);
if (pInstance){
if (pInstance)
{
pInstance->SetData(DATA_BRUTALLUS_EVENT, DONE);
float x,y,z;
m_creature->GetPosition(x,y,z);
@@ -245,7 +247,8 @@ struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI
}
}
void MoveInLineOfSight(Unit *who){
void MoveInLineOfSight(Unit *who)
{
if (pInstance && Intro)
pInstance->SetData(DATA_BRUTALLUS_EVENT, SPECIAL);
}
@@ -93,7 +93,8 @@ enum Creatures
struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI
{
boss_sacrolashAI(Creature *c) : ScriptedAI(c){
boss_sacrolashAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
@@ -350,7 +351,8 @@ CreatureAI* GetAI_boss_sacrolash(Creature* pCreature)
struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI
{
boss_alythessAI(Creature *c) : Scripted_NoMovementAI(c){
boss_alythessAI(Creature *c) : Scripted_NoMovementAI(c)
{
pInstance = c->GetInstanceData();
IntroStepCounter = 10;
}
@@ -527,7 +529,7 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI
uint32 IntroStep(uint32 step)
{
Creature* Sacrolash = Unit::GetCreature((*m_creature),pInstance->GetData64(DATA_SACROLASH));
Creature* Sacrolash = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_SACROLASH) : 0);
switch (step)
{
case 0: return 0;
@@ -126,7 +126,8 @@ static EventFelmyst MaxTimer[]=
struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
{
boss_felmystAI(Creature *c) : ScriptedAI(c){
boss_felmystAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
// wait for core patch be accepted
@@ -307,7 +308,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
error_log("Summon Vapor case 2");
Unit* target;
target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true);
if (!target) target = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_PLAYER_GUID));
if (!target) target = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_PLAYER_GUID) : 0);
if (target)
{
Creature* Vapor = m_creature->SummonCreature(MOB_VAPOR, target->GetPositionX()-5+rand()%10, target->GetPositionY()-5+rand()%10, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 9000);
@@ -332,7 +333,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
//m_creature->CastSpell(m_creature, SPELL_VAPOR_SELECT); need core support
Unit* target;
target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true);
if (!target) target = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_PLAYER_GUID));
if (!target) target = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_PLAYER_GUID) : 0);
if (target)
{
//target->CastSpell(target, SPELL_VAPOR_SUMMON, true); need core support
@@ -359,7 +360,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
case 5:{
Unit* target;
target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true);
if (!target) target = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_PLAYER_GUID));
if (!target) target = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_PLAYER_GUID) : 0);
if (target)
{
BreathX = target->GetPositionX();
@@ -169,7 +169,7 @@ struct TRINITY_DLL_DECL boss_kalecgosAI : public ScriptedAI
{
m_creature->SetStandState(UNIT_STAND_STATE_STAND);
DoScriptText(SAY_EVIL_AGGRO, m_creature);
if (GameObject *Door = pInstance->instance->GetGameObject(pInstance->GetData64(DoorGUID)))
if (GameObject *Door = pInstance ? pInstance->instance->GetGameObject(pInstance->GetData64(DoorGUID)) : NULL)
Door->SetLootState(GO_ACTIVATED);
DoZoneInCombat();
@@ -548,7 +548,7 @@ void boss_kalecgosAI::UpdateAI(const uint32 diff)
m_creature->RemoveAllAuras();
m_creature->DeleteThreatList();
m_creature->CombatStop();
if (GameObject *Door = pInstance->instance->GetGameObject(pInstance->GetData64(DoorGUID)))
if (GameObject *Door = pInstance ? pInstance->instance->GetGameObject(pInstance->GetData64(DoorGUID)) : NULL)
Door->SetLootState(GO_JUST_DEACTIVATED);
TalkSequence++;
}
@@ -268,13 +268,15 @@ public:
bool GOHello_go_orb_of_the_blue_flight(Player* pPlayer, GameObject* pGo)
{
if (pGo->GetUInt32Value(GAMEOBJECT_FACTION) == 35){
if (pGo->GetUInt32Value(GAMEOBJECT_FACTION) == 35)
{
ScriptedInstance* pInstance = pGo->GetInstanceData();
float x,y,z;
//float dx,dy,dz;
pGo->SummonCreature(CREATURE_POWER_OF_THE_BLUE_DRAGONFLIGHT, pPlayer->GetPositionX(), pPlayer->GetPositionY(), pPlayer->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 121000);
pPlayer->CastSpell(pPlayer, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT, true);
pGo->SetUInt32Value(GAMEOBJECT_FACTION, 0);
if(pInstance)
Creature* Kalec = Unit::GetCreature(*pPlayer, pInstance->GetData64(DATA_KALECGOS_KJ));
//Kalec->RemoveDynObject(SPELL_RING_OF_BLUE_FLAMES);
pGo->GetPosition(x,y,z);
@@ -301,7 +303,8 @@ bool GOHello_go_orb_of_the_blue_flight(Player* pPlayer, GameObject* pGo)
//AI for Kalecgos
struct TRINITY_DLL_DECL boss_kalecgos_kjAI : public ScriptedAI
{
boss_kalecgos_kjAI(Creature* c) : ScriptedAI(c){
boss_kalecgos_kjAI(Creature* c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
@@ -345,7 +348,7 @@ struct TRINITY_DLL_DECL 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->instance->GetGameObject(pInstance->GetData64((*itr)->GetGUID()));
Orb[i] = pInstance ? pInstance->instance->GetGameObject(pInstance->GetData64((*itr)->GetGUID())) : NULL;
}
}
@@ -386,10 +389,13 @@ struct TRINITY_DLL_DECL boss_kalecgos_kjAI : public ScriptedAI
}
}
}*/
if(Orb[random])
{
Orb[random]->CastSpell(m_creature, SPELL_RING_OF_BLUE_FLAMES);
Orb[random]->SetUInt32Value(GAMEOBJECT_FACTION, 35);
Orb[random]->setActive(true);
Orb[random]->Refresh();
}
++OrbsEmpowered;
}
++EmpowerCount;
@@ -420,7 +426,8 @@ CreatureAI* GetAI_boss_kalecgos_kj(Creature* pCreature)
//AI for Kil'jaeden
struct TRINITY_DLL_DECL boss_kiljaedenAI : public Scripted_NoMovementAI
{
boss_kiljaedenAI(Creature* c) : Scripted_NoMovementAI(c), Summons(m_creature){
boss_kiljaedenAI(Creature* c) : Scripted_NoMovementAI(c), Summons(m_creature)
{
pInstance = c->GetInstanceData();
}
@@ -472,6 +479,7 @@ struct TRINITY_DLL_DECL 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);
}
@@ -716,7 +724,7 @@ struct TRINITY_DLL_DECL boss_kiljaedenAI : public Scripted_NoMovementAI
if (Phase <= PHASE_ARMAGEDDON){
if (Phase == PHASE_ARMAGEDDON && ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 25)){
Phase = PHASE_SACRIFICE;
Creature* Anveena = (Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_ANVEENA)));
Creature* Anveena = (Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_ANVEENA) : 0));
if (Anveena)Anveena->CastSpell(m_creature, SPELL_SACRIFICE_OF_ANVEENA, false);
OrbActivated = false;
ChangeTimers(true, 10000);// He shouldn't cast spells for ~10 seconds after Anveena's sacrifice. This will be done within Anveena's script
@@ -735,7 +743,8 @@ CreatureAI* GetAI_boss_kiljaeden(Creature* pCreature)
//AI for Kil'jaeden Event Controller
struct TRINITY_DLL_DECL mob_kiljaeden_controllerAI : public Scripted_NoMovementAI
{
mob_kiljaeden_controllerAI(Creature* c) : Scripted_NoMovementAI(c), Summons(m_creature){
mob_kiljaeden_controllerAI(Creature* c) : Scripted_NoMovementAI(c), Summons(m_creature)
{
pInstance = c->GetInstanceData();
}
@@ -750,7 +759,9 @@ struct TRINITY_DLL_DECL mob_kiljaeden_controllerAI : public Scripted_NoMovementA
uint32 Phase;
uint8 DeceiverDeathCount;
void InitializeAI(){
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);
@@ -790,7 +801,7 @@ struct TRINITY_DLL_DECL mob_kiljaeden_controllerAI : public Scripted_NoMovementA
void UpdateAI(const uint32 diff)
{
if (RandomSayTimer < diff && pInstance->GetData(DATA_MURU_EVENT) != DONE && pInstance->GetData(DATA_KILJAEDEN_EVENT) == NOT_STARTED){
if (RandomSayTimer < diff && pInstance && pInstance->GetData(DATA_MURU_EVENT) != DONE && pInstance->GetData(DATA_KILJAEDEN_EVENT) == NOT_STARTED){
switch(rand()%5){
case 0: DoScriptText(SAY_KJ_OFFCOMBAT1, m_creature); break;
case 1: DoScriptText(SAY_KJ_OFFCOMBAT2, m_creature); break;
@@ -826,7 +837,8 @@ CreatureAI* GetAI_mob_kiljaeden_controller(Creature* pCreature)
//AI for Hand of the Deceiver
struct TRINITY_DLL_DECL mob_hand_of_the_deceiverAI : public ScriptedAI
{
mob_hand_of_the_deceiverAI(Creature* c) : ScriptedAI(c){
mob_hand_of_the_deceiverAI(Creature* c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
@@ -838,7 +850,8 @@ struct TRINITY_DLL_DECL mob_hand_of_the_deceiverAI : public ScriptedAI
// TODO: Timers!
ShadowBoltVolleyTimer = 8000 + rand()%6000; // So they don't all cast it in the same moment.
FelfirePortalTimer = 20000;
if (pInstance)pInstance->SetData(DATA_KILJAEDEN_EVENT, NOT_STARTED);
if (pInstance)
pInstance->SetData(DATA_KILJAEDEN_EVENT, NOT_STARTED);
}
void JustSummoned(Creature* summoned){
@@ -847,7 +860,8 @@ struct TRINITY_DLL_DECL mob_hand_of_the_deceiverAI : public ScriptedAI
}
void EnterCombat(Unit* who){
if (pInstance){
if (pInstance)
{
pInstance->SetData(DATA_KILJAEDEN_EVENT, IN_PROGRESS);
Creature* Control = CAST_CRE(Unit::GetUnit(*m_creature, pInstance->GetData64(DATA_KILJAEDEN_CONTROLLER)));
if (Control)
@@ -856,7 +870,8 @@ struct TRINITY_DLL_DECL mob_hand_of_the_deceiverAI : public ScriptedAI
m_creature->InterruptNonMeleeSpells(true);
}
void JustDied(Unit* killer){
void JustDied(Unit* killer)
{
if (!pInstance)
return;
@@ -1050,7 +1065,8 @@ CreatureAI* GetAI_mob_armageddon(Creature* pCreature)
//AI for Shield Orbs
struct TRINITY_DLL_DECL mob_shield_orbAI : public ScriptedAI
{
mob_shield_orbAI(Creature* c) : ScriptedAI(c) {
mob_shield_orbAI(Creature* c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
@@ -1101,7 +1117,7 @@ struct TRINITY_DLL_DECL mob_shield_orbAI : public ScriptedAI
}
if (Timer < diff){
Unit* random = (Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_PLAYER_GUID)));
Unit* random = (Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_PLAYER_GUID) : 0));
if (random)DoCast(random, SPELL_SHADOW_BOLT, false);
Timer = 500+ rand()%500;
}else Timer -= diff;
@@ -1316,4 +1332,4 @@ void AddSC_boss_kiljaeden()
newscript->GetAI = &GetAI_mob_sinster_reflection;
newscript->Name = "mob_sinster_reflection";
newscript->RegisterSelf();
};
}
@@ -287,6 +287,8 @@ struct TRINITY_DLL_DECL boss_muruAI : public Scripted_NoMovementAI
{
if (Timer[TIMER_PHASE] <diff)
{
if(!pInstance)
return;
switch(pInstance->GetData(DATA_MURU_EVENT))
{
case NOT_STARTED:
@@ -394,7 +396,7 @@ struct TRINITY_DLL_DECL npc_muru_portalAI : public Scripted_NoMovementAI
void JustSummoned(Creature* summoned)
{
Player* Target = Unit::GetPlayer(pInstance->GetData64(DATA_PLAYER_GUID));
Player* Target = Unit::GetPlayer(pInstance ? pInstance->GetData64(DATA_PLAYER_GUID) : 0);
if (Target)
summoned->AI()->AttackStart(Target);
@@ -423,7 +425,8 @@ struct TRINITY_DLL_DECL npc_muru_portalAI : public Scripted_NoMovementAI
{
if (!SummonSentinel)
{
if (InAction && pInstance->GetData(DATA_MURU_EVENT) == NOT_STARTED)Reset();
if (InAction && pInstance && pInstance->GetData(DATA_MURU_EVENT) == NOT_STARTED)
Reset();
return;
}
if (SummonTimer < diff)
@@ -442,12 +445,7 @@ CreatureAI* GetAI_npc_muru_portal(Creature* pCreature)
struct TRINITY_DLL_DECL npc_dark_fiendAI : public ScriptedAI
{
npc_dark_fiendAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
npc_dark_fiendAI(Creature *c) : ScriptedAI(c) {}
uint32 WaitTimer;
bool InAction;
@@ -507,12 +505,7 @@ CreatureAI* GetAI_npc_dark_fiend(Creature* pCreature)
struct TRINITY_DLL_DECL npc_void_sentinelAI : public ScriptedAI
{
npc_void_sentinelAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
npc_void_sentinelAI(Creature *c) : ScriptedAI(c){}
uint32 PulseTimer;
uint32 VoidBlastTimer;
@@ -588,7 +581,7 @@ struct TRINITY_DLL_DECL npc_blackholeAI : public ScriptedAI
{
if (SpellTimer < diff)
{
Unit* Victim = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_PLAYER_GUID));
Unit* Victim = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_PLAYER_GUID) : 0);
switch(NeedForAHack)
{
case 0:
@@ -51,7 +51,7 @@ struct TRINITY_DLL_DECL boss_archaedasAI : public ScriptedAI
{
boss_archaedasAI(Creature *c) : ScriptedAI(c)
{
pInstance = (m_creature->GetInstanceData());
pInstance = m_creature->GetInstanceData();
}
uint32 Tremor_Timer;
@@ -73,7 +73,8 @@ struct TRINITY_DLL_DECL boss_archaedasAI : public ScriptedAI
guardiansAwake = false;
vaultWalkersAwake = false;
if (pInstance) pInstance->SetData (NULL, 5); // respawn any dead minions
if (pInstance)
pInstance->SetData (NULL, 5); // respawn any dead minions
m_creature->setFaction(35);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
@@ -208,7 +209,7 @@ struct TRINITY_DLL_DECL mob_archaedas_minionsAI : public ScriptedAI
{
mob_archaedas_minionsAI(Creature *c) : ScriptedAI(c)
{
pInstance = (m_creature->GetInstanceData());
pInstance = m_creature->GetInstanceData();
}
uint32 Arcing_Timer;
@@ -264,7 +265,7 @@ struct TRINITY_DLL_DECL mob_archaedas_minionsAI : public ScriptedAI
} else if (wakingUp && Awaken_Timer <= 0) {
wakingUp = false;
amIAwake = true;
AttackStart(Unit::GetUnit(*m_creature, pInstance->GetData64(0))); // whoWokeArchaedasGUID
// AttackStart(Unit::GetUnit(*m_creature, pInstance->GetData64(0))); // whoWokeArchaedasGUID
return; // dont want to continue until we finish the AttackStart method
}
@@ -332,8 +333,10 @@ bool GOHello_go_altar_of_archaedas(Player* pPlayer, GameObject* pGo)
return false; // not enough people
}
ScriptedInstance* pInstance = (pPlayer->GetInstanceData());
if (!pInstance) return false;
ScriptedInstance* pInstance = pPlayer->GetInstanceData();
if (!pInstance)
return false;
pInstance->SetData(NULL,0);
pInstance->SetData64(0,pPlayer->GetGUID()); // activate archaedas
@@ -416,8 +419,9 @@ static uint32 altarOfTheKeeperCounter=0;
bool GOHello_go_altar_of_the_keepers(Player* pPlayer, GameObject* pGo)
{
ScriptedInstance* pInstance = (pPlayer->GetInstanceData());
if (!pInstance) return true;
ScriptedInstance* pInstance = pPlayer->GetInstanceData();
if (!pInstance)
return true;
bool alreadyUsed;
@@ -139,7 +139,7 @@ bool GossipSelect_npc_zulaman_hostage(Player* pPlayer, Creature* pCreature, uint
return true;
pCreature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
ScriptedInstance* pInstance = (pCreature->GetInstanceData());
ScriptedInstance* pInstance = pCreature->GetInstanceData();
if (pInstance)
{
//uint8 progress = pInstance->GetData(DATA_CHESTLOOTED);
@@ -26,7 +26,7 @@ EndScriptData */
bool GOHello_go_gong_of_bethekk(Player* pPlayer, GameObject* pGo)
{
if (ScriptedInstance* m_pInstance = (ScriptedInstance*)pGo->GetInstanceData())
if (ScriptedInstance* m_pInstance = pGo->GetInstanceData())
{
if (m_pInstance->GetData(TYPE_ARLOKK) == DONE || m_pInstance->GetData(TYPE_ARLOKK) == IN_PROGRESS)
return true;
@@ -41,12 +41,7 @@ EndScriptData */
struct TRINITY_DLL_DECL boss_jindoAI : public ScriptedAI
{
boss_jindoAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance *pInstance;
boss_jindoAI(Creature *c) : ScriptedAI(c) {}
uint32 BrainWashTotem_Timer;
uint32 HealingWard_Timer;
@@ -205,15 +200,10 @@ struct TRINITY_DLL_DECL mob_healing_wardAI : public ScriptedAI
//Shade of Jindo
struct TRINITY_DLL_DECL mob_shade_of_jindoAI : public ScriptedAI
{
mob_shade_of_jindoAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
mob_shade_of_jindoAI(Creature *c) : ScriptedAI(c) {}
uint32 ShadowShock_Timer;
ScriptedInstance *pInstance;
void Reset()
{
ShadowShock_Timer = 1000;
@@ -180,7 +180,6 @@ struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI
}
}
DoMeleeAttackIfReady();
}
};
@@ -46,7 +46,7 @@ struct TRINITY_DLL_DECL boss_chrono_lord_dejaAI : public ScriptedAI
boss_chrono_lord_dejaAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance *pInstance;
@@ -279,7 +279,7 @@ struct TRINITY_DLL_DECL npc_time_riftAI : public ScriptedAI
if (!creature_entry)
return;
if (pInstance->GetData(TYPE_MEDIVH) != IN_PROGRESS)
if (pInstance && pInstance->GetData(TYPE_MEDIVH) != IN_PROGRESS)
{
m_creature->InterruptNonMeleeSpells(true);
m_creature->RemoveAllAuras();
@@ -297,7 +297,7 @@ struct TRINITY_DLL_DECL npc_time_riftAI : public ScriptedAI
if (Summon)
{
if (Unit *temp = Unit::GetUnit(*m_creature,pInstance->GetData64(DATA_MEDIVH)))
if (Unit *temp = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_MEDIVH) : 0))
Summon->AddThreat(temp,0.0f);
}
}
@@ -708,7 +708,8 @@ void hyjalAI::SpawnVeins()
void hyjalAI::DeSpawnVeins()
{
if (!pInstance)return;
if (!pInstance)
return;
if (Faction == 1)
{
Creature* pUnit=Unit::GetCreature((*m_creature),pInstance->GetData64(DATA_JAINAPROUDMOORE));
@@ -751,7 +752,7 @@ void hyjalAI::UpdateAI(const uint32 diff)
switch(m_creature->GetEntry())
{
case JAINA:
if (pInstance->GetData(DATA_ALLIANCE_RETREAT))
if (pInstance && pInstance->GetData(DATA_ALLIANCE_RETREAT))
{
m_creature->SetVisibility(VISIBILITY_OFF);
HideNearPos(m_creature->GetPositionX(), m_creature->GetPositionY());
@@ -763,7 +764,7 @@ void hyjalAI::UpdateAI(const uint32 diff)
else m_creature->SetVisibility(VISIBILITY_ON);
break;
case THRALL: //thrall
if (pInstance->GetData(DATA_HORDE_RETREAT))
if (pInstance && pInstance->GetData(DATA_HORDE_RETREAT))
{
m_creature->SetVisibility(VISIBILITY_OFF);
HideNearPos(m_creature->GetPositionX(), m_creature->GetPositionY());
@@ -867,6 +868,7 @@ void hyjalAI::UpdateAI(const uint32 diff)
CheckTimer = 0;
m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
BossGUID[i] = 0;
if(pInstance)
pInstance->DoUpdateWorldState(WORLD_STATE_ENEMY, 0); // Reset world state for enemies to disable it
}
}
@@ -363,7 +363,8 @@ void hyjal_trashAI::UpdateAI(const uint32 diff)
void hyjal_trashAI::JustDied(Unit *victim)
{
if (!pInstance)return;
if (!pInstance)
return;
if (IsEvent && !m_creature->isWorldBoss())
pInstance->SetData(DATA_TRASH, 0);//signal trash is dead
@@ -46,7 +46,7 @@ bool GossipHello_npc_erozion(Player* pPlayer, Creature* pCreature)
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
ScriptedInstance* pInstance = (pCreature->GetInstanceData());
ScriptedInstance* pInstance = pCreature->GetInstanceData();
if (pInstance && pInstance->GetData(TYPE_BARREL_DIVERSION) != DONE && !pPlayer->HasItemCount(ITEM_ENTRY_BOMBS,1))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I need a pack of Incendiary Bombs.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
@@ -491,7 +491,7 @@ bool GossipHello_npc_thrall_old_hillsbrad(Player* pPlayer, Creature* pCreature)
pPlayer->SendPreparedQuest(pCreature->GetGUID());
}
ScriptedInstance* pInstance = (pCreature->GetInstanceData());
ScriptedInstance* pInstance = pCreature->GetInstanceData();
if (pInstance)
{
if (pInstance->GetData(TYPE_BARREL_DIVERSION) == DONE && !pInstance->GetData(TYPE_THRALL_EVENT))
@@ -517,7 +517,7 @@ bool GossipHello_npc_thrall_old_hillsbrad(Player* pPlayer, Creature* pCreature)
bool GossipSelect_npc_thrall_old_hillsbrad(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
{
ScriptedInstance* pInstance = (pCreature->GetInstanceData());
ScriptedInstance* pInstance = pCreature->GetInstanceData();
switch(uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
@@ -609,7 +609,7 @@ CreatureAI* GetAI_npc_taretha(Creature* pCreature)
bool GossipHello_npc_taretha(Player* pPlayer, Creature* pCreature)
{
ScriptedInstance* pInstance = (pCreature->GetInstanceData());
ScriptedInstance* pInstance = pCreature->GetInstanceData();
if (pInstance && pInstance->GetData(TYPE_THRALL_PART3) == DONE && pInstance->GetData(TYPE_THRALL_PART4) == NOT_STARTED)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_EPOCH1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
@@ -620,7 +620,7 @@ bool GossipHello_npc_taretha(Player* pPlayer, Creature* pCreature)
bool GossipSelect_npc_taretha(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
{
ScriptedInstance* pInstance = (pCreature->GetInstanceData());
ScriptedInstance* pInstance = pCreature->GetInstanceData();
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_EPOCH2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
@@ -630,9 +630,8 @@ bool GossipSelect_npc_taretha(Player* pPlayer, Creature* pCreature, uint32 uiSen
{
pPlayer->CLOSE_GOSSIP_MENU();
if (pInstance->GetData(TYPE_THRALL_EVENT) == IN_PROGRESS)
if (pInstance && pInstance->GetData(TYPE_THRALL_EVENT) == IN_PROGRESS)
{
if (pInstance)
pInstance->SetData(TYPE_THRALL_PART4,IN_PROGRESS);
if (pInstance->GetData64(DATA_EPOCH) == 0)
pCreature->SummonCreature(ENTRY_EPOCH,2639.13,698.55,65.43,4.59,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,120000);
@@ -136,7 +136,6 @@ struct TRINITY_DLL_DECL npc_deaths_head_ward_keeperAI : public ScriptedAI
npc_deaths_head_ward_keeperAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
Reset();
}
ScriptedInstance *pInstance;
@@ -53,12 +53,9 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI
{
boss_skeramAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
IsImage = false;
}
ScriptedInstance *pInstance;
uint32 ArcaneExplosion_Timer;
uint32 EarthShock_Timer;
uint32 FullFillment_Timer;
@@ -59,7 +59,13 @@ EndScriptData */
struct TRINITY_DLL_DECL boss_twinemperorsAI : public ScriptedAI
{
boss_twinemperorsAI(Creature *c): ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance *pInstance;
uint32 Heal_Timer;
uint32 Teleport_Timer;
bool AfterTeleport;
@@ -73,11 +79,6 @@ struct TRINITY_DLL_DECL boss_twinemperorsAI : public ScriptedAI
virtual void Reset() = 0;
virtual void CastSpellOnBug(Creature *target) = 0;
boss_twinemperorsAI(Creature *c): ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
void TwinReset()
{
Heal_Timer = 0; // first heal immediately when they get close together
@@ -95,14 +96,10 @@ struct TRINITY_DLL_DECL boss_twinemperorsAI : public ScriptedAI
Creature *GetOtherBoss()
{
if (pInstance)
{
return Unit::GetCreature(*m_creature, pInstance->GetData64(IAmVeklor() ? DATA_VEKNILASH : DATA_VEKLOR));
}
else
{
return NULL;
}
}
void DamageTaken(Unit *done_by, uint32 &damage)
{
@@ -353,7 +353,7 @@ CreatureAI* GetAI_npc_disciple_of_naralex(Creature* pCreature)
bool GossipHello_npc_disciple_of_naralex(Player* pPlayer, Creature* pCreature)
{
ScriptedInstance *pInstance = (pCreature->GetInstanceData());
ScriptedInstance *pInstance = pCreature->GetInstanceData();
if (pInstance)
{
@@ -380,11 +380,12 @@ bool GossipHello_npc_disciple_of_naralex(Player* pPlayer, Creature* pCreature)
bool GossipSelect_npc_disciple_of_naralex(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
{
ScriptedInstance *pInstance = (pCreature->GetInstanceData());
ScriptedInstance *pInstance = pCreature->GetInstanceData();
if (uiAction == GOSSIP_ACTION_INFO_DEF + 1)
{
pPlayer->CLOSE_GOSSIP_MENU();
if (pInstance)pInstance->SetData(TYPE_NARALEX_EVENT, IN_PROGRESS);
if (pInstance)
pInstance->SetData(TYPE_NARALEX_EVENT, IN_PROGRESS);
DoScriptText(SAY_MAKE_PREPARATIONS, pCreature);
@@ -257,7 +257,7 @@ struct TRINITY_DLL_DECL mob_chaotic_riftAI : public Scripted_NoMovementAI
if (SPELL_CHAOTIC_ENERGY_BURST_Timer < diff)
{
Unit* Anomalus = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_ANOMALUS));
Unit* Anomalus = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_ANOMALUS) : 0);
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
if (Anomalus && Anomalus->HasAura(SPELL_RIFT_SHIELD))
DoCast(target, SPELL_CHARGED_CHAOTIC_ENERGY_BURST);
@@ -272,7 +272,7 @@ struct TRINITY_DLL_DECL mob_chaotic_riftAI : public Scripted_NoMovementAI
if (Wraith)
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
Wraith->AI()->AttackStart(target);
Unit* Anomalus = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_ANOMALUS));
Unit* Anomalus = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_ANOMALUS) : 0);
if (Anomalus && Anomalus->HasAura(SPELL_RIFT_SHIELD))
SUMMON_CRAZED_MANA_WRAITH_Timer = 5000;
else
@@ -127,6 +127,9 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
bool CheckContainmentSpheres(bool remove_prison = false)
{
if(!pInstance)
return false;
ContainmentSphereGUIDs[0] = pInstance->GetData64(ANOMALUS_CONTAINMET_SPHERE);
ContainmentSphereGUIDs[1] = pInstance->GetData64(ORMOROKS_CONTAINMET_SPHERE);
ContainmentSphereGUIDs[2] = pInstance->GetData64(TELESTRAS_CONTAINMET_SPHERE);
@@ -230,7 +233,7 @@ bool GOHello_containment_sphere(Player *pPlayer, GameObject *pGO)
{
ScriptedInstance *pInstance = pGO->GetInstanceData();
Creature *Keristrasza = Unit::GetCreature(*pGO, pInstance->GetData64(DATA_KERISTRASZA));
Creature *Keristrasza = Unit::GetCreature(*pGO, pInstance ? pInstance->GetData64(DATA_KERISTRASZA) : 0);
if (Keristrasza && Keristrasza->isAlive())
{
// maybe these are hacks :(
@@ -355,9 +355,9 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
if (!UpdateVictim())
return;
Unit* pTene = Unit::GetUnit(*m_creature, m_pInstance->GetData64(DATA_TENEBRON));
Unit* pShad = Unit::GetUnit(*m_creature, m_pInstance->GetData64(DATA_SHADRON));
Unit* pVesp = Unit::GetUnit(*m_creature, m_pInstance->GetData64(DATA_VESPERON));
Unit* pTene = Unit::GetUnit(*m_creature, m_pInstance ? m_pInstance->GetData64(DATA_TENEBRON) : 0);
Unit* pShad = Unit::GetUnit(*m_creature, m_pInstance ? m_pInstance->GetData64(DATA_SHADRON) : 0);
Unit* pVesp = Unit::GetUnit(*m_creature, m_pInstance ? m_pInstance->GetData64(DATA_VESPERON) : 0);
//spell will target dragons, if they are still alive at 35%
if (!m_bIsBerserk && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 35 && (pTene->isAlive() || pShad->isAlive() || pVesp->isAlive()))
@@ -63,7 +63,6 @@ struct TRINITY_DLL_DECL boss_ionarAI : public ScriptedAI
{
m_pInstance = pCreature->GetInstanceData();
m_bIsHeroic = pCreature->GetMap()->IsHeroic();
Reset();
}
ScriptedInstance* m_pInstance;
@@ -346,7 +345,6 @@ struct TRINITY_DLL_DECL mob_spark_of_ionarAI : public ScriptedAI
mob_spark_of_ionarAI(Creature *pCreature) : ScriptedAI(pCreature)
{
m_pInstance = pCreature->GetInstanceData();
Reset();
}
ScriptedInstance* m_pInstance;
@@ -76,7 +76,6 @@ struct TRINITY_DLL_DECL boss_volkhanAI : public ScriptedAI
{
m_pInstance = pCreature->GetInstanceData();
m_bIsHeroic = pCreature->GetMap()->IsHeroic();
Reset();
}
ScriptedInstance* m_pInstance;
@@ -366,13 +365,9 @@ struct TRINITY_DLL_DECL mob_molten_golemAI : public ScriptedAI
{
mob_molten_golemAI(Creature *pCreature) : ScriptedAI(pCreature)
{
m_pInstance = pCreature->GetInstanceData();
m_bIsHeroic = pCreature->GetMap()->IsHeroic();
Reset();
}
ScriptedInstance* m_pInstance;
bool m_bIsHeroic;
bool m_bIsFrozen;
@@ -118,9 +118,6 @@ struct TRINITY_DLL_DECL boss_steelbreakerAI : public ScriptedAI
boss_steelbreakerAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
if(!pInstance)
return;
Reset();
}
void Reset()
@@ -128,6 +125,7 @@ struct TRINITY_DLL_DECL boss_steelbreakerAI : public ScriptedAI
events.Reset();
phase = 0;
m_creature->RemoveAllAuras();
if(pInstance)
pInstance->SetData(DATA_ASSEMBLY, NOT_STARTED);
}
@@ -158,13 +156,13 @@ struct TRINITY_DLL_DECL boss_steelbreakerAI : public ScriptedAI
{
if(damage >= m_creature->GetHealth())
{
if(Creature* Brundir = Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_STORMCALLER_BRUNDIR)))
if(Creature* Brundir = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_STORMCALLER_BRUNDIR) : 0))
if(Brundir->isAlive())
{
Brundir->SetHealth(Brundir->GetMaxHealth());
}
if(Creature* Molgeim = Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_RUNEMASTER_MOLGEIM)))
if(Creature* Molgeim = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_RUNEMASTER_MOLGEIM) : 0))
if(Molgeim->isAlive())
{
Molgeim->SetHealth(Molgeim->GetMaxHealth());
@@ -175,7 +173,7 @@ struct TRINITY_DLL_DECL boss_steelbreakerAI : public ScriptedAI
void JustDied(Unit* Killer)
{
if(IsEncounterComplete(pInstance, m_creature))
if(IsEncounterComplete(pInstance, m_creature) && pInstance)
pInstance->SetData(DATA_ASSEMBLY, DONE);
}
@@ -232,15 +230,11 @@ struct TRINITY_DLL_DECL boss_runemaster_molgeimAI : public ScriptedAI
boss_runemaster_molgeimAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
if(!pInstance)
return;
Reset();
}
void Reset()
{
if(pInstance)
pInstance->SetData(DATA_ASSEMBLY, NOT_STARTED);
events.Reset();
m_creature->RemoveAllAuras();
@@ -274,13 +268,13 @@ struct TRINITY_DLL_DECL boss_runemaster_molgeimAI : public ScriptedAI
{
if(damage >= m_creature->GetHealth())
{
if(Creature* Steelbreaker = Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_STEELBREAKER)))
if(Creature* Steelbreaker = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_STEELBREAKER) : 0))
if(Steelbreaker->isAlive())
{
Steelbreaker->SetHealth(Steelbreaker->GetMaxHealth());
}
if(Creature* Brundir = Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_STORMCALLER_BRUNDIR)))
if(Creature* Brundir = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_STORMCALLER_BRUNDIR) : 0))
if(Brundir->isAlive())
{
Brundir->SetHealth(Brundir->GetMaxHealth());
@@ -291,7 +285,7 @@ struct TRINITY_DLL_DECL boss_runemaster_molgeimAI : public ScriptedAI
void JustDied(Unit* Killer)
{
if(IsEncounterComplete(pInstance, m_creature))
if(IsEncounterComplete(pInstance, m_creature) && pInstance)
pInstance->SetData(DATA_ASSEMBLY, DONE);
}
@@ -400,14 +394,11 @@ struct TRINITY_DLL_DECL boss_stormcaller_brundirAI : public ScriptedAI
boss_stormcaller_brundirAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
if(!pInstance)
return;
Reset();
}
void Reset()
{
if(pInstance)
pInstance->SetData(DATA_ASSEMBLY, NOT_STARTED);
m_creature->RemoveAllAuras();
events.Reset();
@@ -445,13 +436,13 @@ struct TRINITY_DLL_DECL boss_stormcaller_brundirAI : public ScriptedAI
{
if(damage >= m_creature->GetHealth())
{
if(Creature* Steelbreaker = Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_STEELBREAKER)))
if(Creature* Steelbreaker = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_STEELBREAKER) : 0))
if(Steelbreaker->isAlive())
{
Steelbreaker->SetHealth(Steelbreaker->GetMaxHealth());
}
if(Creature* Molgeim = Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_RUNEMASTER_MOLGEIM)))
if(Creature* Molgeim = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_RUNEMASTER_MOLGEIM) : 0))
if(Molgeim->isAlive())
{
Molgeim->SetHealth(Molgeim->GetMaxHealth());
@@ -463,7 +454,7 @@ struct TRINITY_DLL_DECL boss_stormcaller_brundirAI : public ScriptedAI
void JustDied(Unit* Killer)
{
if(IsEncounterComplete(pInstance, m_creature))
if(IsEncounterComplete(pInstance, m_creature) && pInstance)
pInstance->SetData(DATA_ASSEMBLY, DONE);
}
@@ -311,7 +311,7 @@ struct TRINITY_DLL_DECL mob_annhylde_the_callerAI : public ScriptedAI
m_creature->GetPosition(x,y,z);
DoTeleportTo(x+1,y,z+30);
Unit* ingvar = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_INGVAR));
Unit* ingvar = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_INGVAR) : 0);
if (ingvar)
{
m_creature->GetMotionMaster()->MovePoint(1,x,y,z+15);
@@ -324,7 +324,7 @@ struct TRINITY_DLL_DECL mob_annhylde_the_callerAI : public ScriptedAI
{
if (type != POINT_MOTION_TYPE)
return;
Unit* ingvar = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_INGVAR));
Unit* ingvar = Unit::GetUnit((*m_creature), pInstance ? pInstance->GetData64(DATA_INGVAR) : 0);
if (ingvar)
{
switch (id)
@@ -354,7 +354,7 @@ struct TRINITY_DLL_DECL mob_annhylde_the_callerAI : public ScriptedAI
{
if (Resurect_Phase == 1)
{
Unit* ingvar = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_INGVAR));
Unit* ingvar = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_INGVAR) : 0);
if (ingvar)
{
ingvar->SetStandState(UNIT_STAND_STATE_STAND);
@@ -364,7 +364,7 @@ struct TRINITY_DLL_DECL mob_annhylde_the_callerAI : public ScriptedAI
Resurect_Phase = 2;
}else if (Resurect_Phase == 2)
{
Creature* ingvar = Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_INGVAR));
Creature* ingvar = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_INGVAR) : 0);
if (ingvar)
{
ingvar->RemoveAurasDueToSpell(SPELL_SCOURG_RESURRECTION_DUMMY);
@@ -398,15 +398,12 @@ struct TRINITY_DLL_DECL mob_ingvar_throw_dummyAI : public ScriptedAI
{
mob_ingvar_throw_dummyAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
}
bool HeroicMode;
uint32 Despawn_Timer;
ScriptedInstance* pInstance;
void Reset()
{
Unit* target = m_creature->FindNearestCreature(ENTRY_THROW_TARGET,50);
@@ -297,7 +297,7 @@ struct TRINITY_DLL_DECL mob_vrykul_skeletonAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
if (pInstance->GetData(DATA_PRINCEKELESETH_EVENT) == IN_PROGRESS)
if (pInstance && pInstance->GetData(DATA_PRINCEKELESETH_EVENT) == IN_PROGRESS)
{
if (isDead)
{
@@ -61,7 +61,7 @@ struct TRINITY_DLL_DECL boss_skarvald_the_constructorAI : public ScriptedAI
boss_skarvald_the_constructorAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance* pInstance;
@@ -82,20 +82,19 @@ struct TRINITY_DLL_DECL boss_skarvald_the_constructorAI : public ScriptedAI
Check_Timer = 5000;
ghost = (m_creature->GetEntry() == MOB_SKARVALD_GHOST);
if (!ghost)
if (!ghost && pInstance)
{
Unit* dalronn = Unit::GetUnit((*m_creature),pInstance->GetData64(DATA_DALRONN));
if (dalronn && dalronn->isDead())
CAST_CRE(dalronn)->Respawn();
if (pInstance)
pInstance->SetData(DATA_SKARVALD_DALRONN_EVENT, NOT_STARTED);
}
}
void EnterCombat(Unit *who)
{
if (!ghost)
if (!ghost && pInstance)
{
DoScriptText(YELL_SKARVALD_AGGRO,m_creature);
@@ -103,14 +102,13 @@ struct TRINITY_DLL_DECL boss_skarvald_the_constructorAI : public ScriptedAI
if (dalronn && dalronn->isAlive() && !dalronn->getVictim())
dalronn->getThreatManager().addThreat(who,0.0f);
if (pInstance)
pInstance->SetData(DATA_SKARVALD_DALRONN_EVENT, IN_PROGRESS);
}
}
void JustDied(Unit* Killer)
{
if (!ghost)
if (!ghost && pInstance)
{
Unit* dalronn = Unit::GetUnit((*m_creature),pInstance->GetData64(DATA_DALRONN));
if (dalronn)
@@ -119,7 +117,6 @@ struct TRINITY_DLL_DECL boss_skarvald_the_constructorAI : public ScriptedAI
{
DoScriptText(YELL_SKARVALD_DAL_DIED,m_creature);
if (pInstance)
pInstance->SetData(DATA_SKARVALD_DALRONN_EVENT, DONE);
}
else
@@ -151,11 +148,9 @@ struct TRINITY_DLL_DECL boss_skarvald_the_constructorAI : public ScriptedAI
{
if (ghost)
{
if (pInstance->GetData(DATA_SKARVALD_DALRONN_EVENT) != IN_PROGRESS)
{
if (pInstance && pInstance->GetData(DATA_SKARVALD_DALRONN_EVENT) != IN_PROGRESS)
m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
}
}
if (!UpdateVictim())
return;
@@ -166,7 +161,7 @@ struct TRINITY_DLL_DECL boss_skarvald_the_constructorAI : public ScriptedAI
if (Check_Timer < diff)
{
Check_Timer = 5000;
Unit* dalronn = Unit::GetUnit((*m_creature),pInstance->GetData64(DATA_DALRONN));
Unit* dalronn = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_DALRONN) : 0);
if (dalronn && dalronn->isDead())
{
Dalronn_isDead = true;
@@ -211,7 +206,7 @@ struct TRINITY_DLL_DECL boss_dalronn_the_controllerAI : public ScriptedAI
boss_dalronn_the_controllerAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance* pInstance;
@@ -238,13 +233,12 @@ struct TRINITY_DLL_DECL boss_dalronn_the_controllerAI : public ScriptedAI
AggroYell_Timer = 0;
ghost = m_creature->GetEntry() == MOB_DALRONN_GHOST;
if (!ghost)
if (!ghost && pInstance)
{
Unit* skarvald = Unit::GetUnit((*m_creature),pInstance->GetData64(DATA_SKARVALD));
if (skarvald && skarvald->isDead())
CAST_CRE(skarvald)->Respawn();
if (pInstance)
pInstance->SetData(DATA_SKARVALD_DALRONN_EVENT, NOT_STARTED);
}
}
@@ -305,11 +299,9 @@ struct TRINITY_DLL_DECL boss_dalronn_the_controllerAI : public ScriptedAI
{
if (ghost)
{
if (pInstance->GetData(DATA_SKARVALD_DALRONN_EVENT) != IN_PROGRESS)
{
if (pInstance && pInstance->GetData(DATA_SKARVALD_DALRONN_EVENT) != IN_PROGRESS)
m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
}
}
if (!UpdateVictim())
return;
@@ -328,7 +320,7 @@ struct TRINITY_DLL_DECL boss_dalronn_the_controllerAI : public ScriptedAI
if (Check_Timer < diff)
{
Check_Timer = 5000;
Unit* skarvald = Unit::GetUnit((*m_creature),pInstance->GetData64(DATA_SKARVALD));
Unit* skarvald = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_SKARVALD) : 0);
if (skarvald && skarvald->isDead())
{
Skarvald_isDead = true;
@@ -127,7 +127,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
boss_grandmaster_vorpilAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
Intro = false;
}
@@ -37,7 +37,7 @@ EndContentData */
bool GossipHello_npc_spirit_of_olum(Player* pPlayer, Creature* pCreature)
{
ScriptedInstance* pInstance = (pCreature->GetInstanceData());
ScriptedInstance* pInstance = pCreature->GetInstanceData();
if (pInstance && (pInstance->GetData(DATA_SUPREMUSEVENT) >= DONE) && (pInstance->GetData(DATA_HIGHWARLORDNAJENTUSEVENT) >= DONE))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_OLUM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
@@ -1123,7 +1123,8 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
void EnterPhase(PhaseAkama NextPhase)
{
if (!pInstance) return;
if (!pInstance)
return;
switch(NextPhase)
{
case PHASE_CHANNEL:
@@ -1241,6 +1242,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
m_creature->InterruptNonMeleeSpells(true);
Spirit[0]->InterruptNonMeleeSpells(true);
Spirit[1]->InterruptNonMeleeSpells(true);
if(pInstance)
pInstance->HandleGameObject(GateGUID, true);
Timer = 2000;
break;
@@ -1271,6 +1273,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
{
case 6:
for(uint8 i = 0; i < 2; ++i)
if(pInstance)
pInstance->HandleGameObject(DoorGUID[i], true);
break;
case 8:
@@ -231,7 +231,7 @@ struct TRINITY_DLL_DECL boss_shade_of_akamaAI : public ScriptedAI
//m_creature->GetMotionMaster()->MoveIdle();
m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_STUN);
if (pInstance && m_creature->isAlive())
if (pInstance)
pInstance->SetData(DATA_SHADEOFAKAMAEVENT, NOT_STARTED);
reseting = false;
@@ -667,7 +667,8 @@ struct TRINITY_DLL_DECL npc_akamaAI : public ScriptedAI
if (ShadeHasDied && (WayPointId == 1))
{
if (pInstance) pInstance->SetData(DATA_SHADEOFAKAMAEVENT, DONE);
if (pInstance)
pInstance->SetData(DATA_SHADEOFAKAMAEVENT, DONE);
m_creature->GetMotionMaster()->MovePoint(WayPointId, AkamaWP[1].x, AkamaWP[1].y, AkamaWP[1].z);
++WayPointId;
}
@@ -137,7 +137,7 @@ struct TRINITY_DLL_DECL mob_blood_elf_council_voice_triggerAI : public ScriptedA
// finds and stores the GUIDs for each Council member using instance data system.
void LoadCouncilGUIDs()
{
if (ScriptedInstance* pInstance = (m_creature->GetInstanceData()))
if (ScriptedInstance* pInstance = m_creature->GetInstanceData())
{
Council[0] = pInstance->GetData64(DATA_GATHIOSTHESHATTERER);
Council[1] = pInstance->GetData64(DATA_VERASDARKSHADOW);
@@ -251,7 +251,8 @@ struct TRINITY_DLL_DECL mob_illidari_councilAI : public ScriptedAI
void StartEvent(Unit *target)
{
if (!pInstance) return;
if (!pInstance)
return;
if (target && target->isAlive())
{
@@ -82,6 +82,7 @@ struct TRINITY_DLL_DECL boss_hydross_the_unstableAI : public ScriptedAI
}
ScriptedInstance* pInstance;
uint64 beams[2];
uint32 PosCheck_Timer;
uint32 MarkOfHydross_Timer;
@@ -135,7 +135,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
pInstance = c->GetInstanceData();
Intro = false;
JustCreated = true;
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); //set it only once on Creature create (no need do intro if wiped)
c->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); //set it only once on Creature create (no need do intro if wiped)
}
ScriptedInstance *pInstance;
@@ -924,7 +924,7 @@ struct TRINITY_DLL_DECL mob_shield_generator_channelAI : public ScriptedAI
bool ItemUse_item_tainted_core(Player* pPlayer, Item* _Item, SpellCastTargets const& targets)
{
ScriptedInstance *pInstance = (pPlayer->GetInstanceData()) ? (pPlayer->GetInstanceData()) : NULL;
ScriptedInstance *pInstance = pPlayer->GetInstanceData();
if (!pInstance)
{
@@ -148,7 +148,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
{
boss_leotheras_the_blindAI(Creature *c) : ScriptedAI(c)
{
m_creature->GetPosition(x,y,z);
c->GetPosition(x,y,z);
pInstance = c->GetInstanceData();
Demon = 0;
@@ -222,7 +222,7 @@ struct TRINITY_DLL_DECL boss_the_lurker_belowAI : public Scripted_NoMovementAI
}else SpoutAnimTimer-=diff;
Map* pMap = m_creature->GetMap();
if (pMap->IsDungeon() && pInstance->GetData(DATA_THELURKERBELOWEVENT) == IN_PROGRESS)
if (pMap->IsDungeon() && pInstance && pInstance->GetData(DATA_THELURKERBELOWEVENT) == IN_PROGRESS)
{
Map::PlayerList const &PlayerList = pMap->GetPlayers();
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
@@ -258,7 +258,7 @@ struct TRINITY_DLL_DECL boss_the_lurker_belowAI : public Scripted_NoMovementAI
//Check if players in water and if in water cast spell
Map* pMap = m_creature->GetMap();
if (pMap->IsDungeon() && pInstance->GetData(DATA_THELURKERBELOWEVENT) == IN_PROGRESS)
if (pMap->IsDungeon() && pInstance && pInstance->GetData(DATA_THELURKERBELOWEVENT) == IN_PROGRESS)
{
Map::PlayerList const &PlayerList = pMap->GetPlayers();
@@ -104,6 +104,7 @@ struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
}
ScriptedInstance* pInstance;
Map::PlayerList const *PlayerList;
uint32 TidalWave_Timer;
@@ -62,7 +62,7 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI
LungBurst_Timer = 7000;
EnvelopingWinds_Timer = 9000;
if (pInstance && m_creature->isAlive())
if (pInstance)
pInstance->SetData(TYPE_HYDROMANCER_THESPIA, NOT_STARTED);
}
@@ -51,7 +51,7 @@ struct TRINITY_DLL_DECL boss_mekgineer_steamriggerAI : public ScriptedAI
boss_mekgineer_steamriggerAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance *pInstance;
@@ -74,7 +74,7 @@ struct TRINITY_DLL_DECL boss_mekgineer_steamriggerAI : public ScriptedAI
Summon50 = false;
Summon25 = false;
if (pInstance && m_creature->isAlive())
if (pInstance)
pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER, NOT_STARTED);
}
@@ -200,7 +200,7 @@ struct TRINITY_DLL_DECL mob_steamrigger_mechanicAI : public ScriptedAI
mob_steamrigger_mechanicAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance* pInstance;
@@ -192,6 +192,8 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
}
void GetCouncil()
{
if(pInstance)
{
//get council member's guid to respawn them if needed
Council[0] = pInstance->GetData64(DATA_KIGGLERTHECRAZED);
@@ -199,6 +201,7 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
Council[2] = pInstance->GetData64(DATA_OLMTHESUMMONER);
Council[3] = pInstance->GetData64(DATA_KROSHFIREHAND);
}
}
void StartEvent(Unit *who)
{
@@ -286,11 +286,9 @@ struct TRINITY_DLL_DECL mob_shadowmoon_channelerAI : public ScriptedAI
{
mob_shadowmoon_channelerAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance* pInstance;
bool HeroicMode;
uint32 ShadowBolt_Timer;
@@ -169,7 +169,7 @@ struct TRINITY_DLL_DECL boss_magtheridonAI : public ScriptedAI
{
boss_magtheridonAI(Creature *c) : ScriptedAI(c)
{
pInstance =m_creature->GetInstanceData();
pInstance = c->GetInstanceData();
m_creature->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10);
m_creature->SetFloatValue(UNIT_FIELD_COMBATREACH, 10);
@@ -511,7 +511,8 @@ struct TRINITY_DLL_DECL mob_hellfire_channelerAI : public ScriptedAI
bool GOHello_go_Manticron_Cube(Player* pPlayer, GameObject* pGo)
{
ScriptedInstance* pInstance = pGo->GetInstanceData();
if (!pInstance) return true;
if (!pInstance)
return true;
if (pInstance->GetData(DATA_MAGTHERIDON_EVENT) != IN_PROGRESS) return true;
Creature *Magtheridon =Unit::GetCreature(*pGo, pInstance->GetData64(DATA_MAGTHERIDON));
if (!Magtheridon || !Magtheridon->isAlive()) return true;
@@ -78,7 +78,7 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
boss_grand_warlock_nethekurseAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance* pInstance;
@@ -138,7 +138,7 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
LeftHeadGUID = 0;
RightHeadGUID = 0;
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance* pInstance;
@@ -52,11 +52,9 @@ struct TRINITY_DLL_DECL boss_warchief_kargath_bladefistAI : public ScriptedAI
{
boss_warchief_kargath_bladefistAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance* pInstance;
bool HeroicMode;
std::vector<uint64> adds;
@@ -380,7 +380,10 @@ struct TRINITY_DLL_DECL npc_warden_mellicharAI : public ScriptedAI
if (pInstance)
{
if (pInstance->GetData(TYPE_HARBINGERSKYRISS) == FAIL)
{
Reset();
return;
}
}
if (CanSpawn)
@@ -58,7 +58,7 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI
boss_harbinger_skyrissAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
Intro = false;
}
@@ -278,11 +278,9 @@ struct TRINITY_DLL_DECL boss_harbinger_skyriss_illusionAI : public ScriptedAI
{
boss_harbinger_skyriss_illusionAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance *pInstance;
bool HeroicMode;
void Reset() { }
@@ -70,7 +70,7 @@ struct TRINITY_DLL_DECL boss_alarAI : public ScriptedAI
boss_alarAI(Creature *c) : ScriptedAI(c)
{
pInstance =c->GetInstanceData();
DefaultMoveSpeedRate = m_creature->GetSpeedRate(MOVE_RUN);
DefaultMoveSpeedRate = c->GetSpeedRate(MOVE_RUN);
}
ScriptedInstance *pInstance;
@@ -431,8 +431,8 @@ struct TRINITY_DLL_DECL mob_ember_of_alarAI : public ScriptedAI
mob_ember_of_alarAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
m_creature->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true);
c->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING);
c->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true);
}
ScriptedInstance *pInstance;
@@ -75,8 +75,8 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
{
pInstance = c->GetInstanceData();
defaultarmor = m_creature->GetArmor();
defaultsize = m_creature->GetFloatValue(OBJECT_FIELD_SCALE_X);
defaultarmor = c->GetArmor();
defaultsize = c->GetFloatValue(OBJECT_FIELD_SCALE_X);
}
ScriptedInstance *pInstance;
@@ -620,6 +620,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
if (Advisor && (Advisor->getStandState() == UNIT_STAND_STATE_DEAD))
{
Phase = 2;
if(m_pInstance)
m_pInstance->SetData(DATA_KAELTHASEVENT, 2);
DoScriptText(SAY_PHASE2_WEAPON, m_creature);
@@ -661,6 +662,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
if (Phase_Timer < diff)
{
DoScriptText(SAY_PHASE3_ADVANCE, m_creature);
if(m_pInstance)
m_pInstance->SetData(DATA_KAELTHASEVENT, 3);
Phase = 3;
PhaseSubphase = 0;
@@ -695,6 +697,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
DoScriptText(SAY_PHASE4_INTRO2, m_creature);
Phase = 4;
if(m_pInstance)
m_pInstance->SetData(DATA_KAELTHASEVENT, 4);
// Sometimes people can collect Aggro in Phase 1-3. Reset threat before releasing Kael.
@@ -800,6 +803,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
{
if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 50)
{
if(m_pInstance)
m_pInstance->SetData(DATA_KAELTHASEVENT, 4);
Phase = 5;
Phase_Timer = 10000;
@@ -44,12 +44,9 @@ struct TRINITY_DLL_DECL boss_gatewatcher_iron_handAI : public ScriptedAI
{
boss_gatewatcher_iron_handAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance *pInstance;
bool HeroicMode;
uint32 Shadow_Power_Timer;
@@ -83,10 +80,6 @@ struct TRINITY_DLL_DECL boss_gatewatcher_iron_handAI : public ScriptedAI
void JustDied(Unit* Killer)
{
DoScriptText(SAY_DEATH_1, m_creature);
if (!pInstance)
return;
//TODO: Add door check/open code
}
@@ -46,7 +46,7 @@ struct TRINITY_DLL_DECL boss_nethermancer_sepethreaAI : public ScriptedAI
boss_nethermancer_sepethreaAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance *pInstance;
@@ -52,7 +52,7 @@ struct TRINITY_DLL_DECL boss_pathaleon_the_calculatorAI : public ScriptedAI
{
boss_pathaleon_the_calculatorAI(Creature *c) : ScriptedAI(c), summons(m_creature)
{
HeroicMode = m_creature->GetMap()->IsHeroic();
HeroicMode = c->GetMap()->IsHeroic();
}
uint32 Summon_Timer;
@@ -179,8 +179,6 @@ struct TRINITY_DLL_DECL mob_nether_wraithAI : public ScriptedAI
{
mob_nether_wraithAI(Creature *c) : ScriptedAI(c) {}
ScriptedInstance *pInstance;
uint32 ArcaneMissiles_Timer;
uint32 Detonation_Timer;
uint32 Die_Timer;