Removed some unnecessarily code, implemented guid store for chests, removed pointers.

--HG--
branch : trunk
This commit is contained in:
_manuel_
2010-06-05 11:38:52 -03:00
parent d2da56ed31
commit 373fc63a50
2 changed files with 168 additions and 171 deletions
@@ -115,7 +115,7 @@ enum eAchievementData
ACHIEV_25_SHUTOUT = 10055,
ACHIEV_10_SIEGE_OF_ULDUAR = 9999,
ACHIEV_25_SIEGE_OF_ULDUAR = 10003,
//ACHIEV_10_THREE_CAR_GARAGE = 10046, 10047, 10048,
//ACHIEV_10_THREE_CAR_GARAGE = 10046, 10047, 10048,
//ACHIEV_25_THREE_CAR_GARAGE = 10049, 10050, 10051,
ACHIEV_10_UNBROKEN = 10044,
ACHIEV_25_UNBROKEN = 10045,
@@ -131,22 +131,21 @@ struct boss_flame_leviathanAI : public BossAI
boss_flame_leviathanAI(Creature* pCreature) : BossAI(pCreature, TYPE_LEVIATHAN), vehicle(pCreature->GetVehicleKit())
{
assert(vehicle);
if (pInstance)
pInstance = pCreature->GetInstanceData();
pInstance = pCreature->GetInstanceData();
}
Vehicle* vehicle;
uint8 uiActiveTowers;
ScriptedInstance* pInstance;
Vehicle* vehicle;
uint8 uiActiveTowers;
void Reset()
{
_Reset();
assert(vehicle);
uiActiveTowers = 0;
me->SetReactState(REACT_AGGRESSIVE);
if (pInstance)
pInstance->SetData(TYPE_LEVIATHAN, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/)
@@ -159,8 +158,7 @@ struct boss_flame_leviathanAI : public BossAI
events.ScheduleEvent(EVENT_VENT, 20000);
events.ScheduleEvent(EVENT_SPEED, 15000);
events.ScheduleEvent(EVENT_SUMMON, 0);
if (pInstance)
pInstance->SetData(TYPE_LEVIATHAN, IN_PROGRESS);
if (Creature *turret = CAST_CRE(vehicle->GetPassenger(SEAT_TURRET)))
turret->AI()->DoZoneInCombat();
}
@@ -174,10 +172,10 @@ struct boss_flame_leviathanAI : public BossAI
void JustDied(Unit* /*victim*/)
{
_JustDied();
DoScriptText(SAY_DEATH, me);
if (pInstance)
{
pInstance->SetData(TYPE_LEVIATHAN, DONE);
if (uiActiveTowers)
{
switch (uiActiveTowers)
@@ -196,7 +194,6 @@ struct boss_flame_leviathanAI : public BossAI
break;
}
}
_JustDied();
}
}
@@ -309,7 +306,7 @@ struct boss_flame_leviathanAI : public BossAI
{
--uiActiveTowers;
}
switch (uiAction)
{
case 0: // Activate hard-mode
@@ -478,7 +475,7 @@ struct spell_pool_of_tarAI : public TriggerAI
struct npc_colossusAI : public ScriptedAI
{
npc_colossusAI(Creature* pCreature) : ScriptedAI(pCreature)
npc_colossusAI(Creature* pCreature) : ScriptedAI(pCreature)
{
pInstance = pCreature->GetInstanceData();
}
@@ -490,8 +487,8 @@ struct npc_colossusAI : public ScriptedAI
{
if (me->GetHomePosition().IsInDist(Center,50.f))
{
if (pInstance)
pInstance->SetData(TYPE_COLOSSUS,pInstance->GetData(TYPE_COLOSSUS)+1);
if (pInstance)
pInstance->SetData(TYPE_COLOSSUS,pInstance->GetData(TYPE_COLOSSUS)+1);
}
}
@@ -21,77 +21,80 @@
enum eGameObjects
{
GO_Kologarn_CHEST_HERO = 195047,
GO_Kologarn_CHEST = 195046,
GO_Thorim_CHEST_HERO = 194315,
GO_Thorim_CHEST = 194314,
GO_Hodir_CHEST_HERO = 194308,
GO_Hodir_CHEST = 194307,
GO_Freya_CHEST_HERO = 194325,
GO_Freya_CHEST = 194324,
GO_KOLOGARN_CHEST_HERO = 195047,
GO_KOLOGARN_CHEST = 195046,
GO_THORIM_CHEST_HERO = 194315,
GO_THORIM_CHEST = 194314,
GO_HODIR_CHEST_HERO = 194308,
GO_HODIR_CHEST = 194307,
GO_FREYA_CHEST_HERO = 194325,
GO_FREYA_CHEST = 194324,
GO_LEVIATHAN_DOOR = 194905,
GO_LEVIATHAN_GATE = 194630
};
struct instance_ulduar : public ScriptedInstance
{
instance_ulduar(Map* pMap) : ScriptedInstance(pMap), KologarnChest(NULL), ThorimChest(NULL), HodirChest(NULL), FreyaChest(NULL) { Initialize(); };
instance_ulduar(Map* pMap) : ScriptedInstance(pMap) { Initialize(); };
uint32 m_auiEncounter[MAX_ENCOUNTER];
uint32 uiEncounter[MAX_ENCOUNTER];
std::string m_strInstData;
uint8 flag;
uint64 m_uiLeviathanGUID;
uint64 m_uiIgnisGUID;
uint64 m_uiRazorscaleGUID;
uint64 m_uiXT002GUID;
uint64 m_auiAssemblyGUIDs[3];
uint64 m_uiKologarnGUID;
uint64 m_uiAuriayaGUID;
uint64 m_uiMimironGUID;
uint64 m_uiHodirGUID;
uint64 m_uiThorimGUID;
uint64 m_uiFreyaGUID;
uint64 m_uiVezaxGUID;
uint64 m_uiYoggSaronGUID;
uint64 m_uiAlgalonGUID;
uint64 m_uiLeviathanDoor[7];
uint64 m_uiLeviathanGateGUID;
uint64 uiLeviathanGUID;
uint64 uiIgnisGUID;
uint64 uiRazorscaleGUID;
uint64 uiXT002GUID;
uint64 uiAssemblyGUIDs[3];
uint64 uiKologarnGUID;
uint64 uiAuriayaGUID;
uint64 uiMimironGUID;
uint64 uiHodirGUID;
uint64 uiThorimGUID;
uint64 uiFreyaGUID;
uint64 uiVezaxGUID;
uint64 uiYoggSaronGUID;
uint64 uiAlgalonGUID;
uint64 uiLeviathanDoor[7];
uint64 uiLeviathanGateGUID;
GameObject* KologarnChest, *ThorimChest, *HodirChest, *FreyaChest;
uint64 uiKologarnChestGUID;
uint64 uiThorimChestGUID;
uint64 uiHodirChestGUID;
uint64 uiFreyaChestGUID;
void Initialize()
{
m_uiLeviathanGUID = 0;
m_uiIgnisGUID = 0;
m_uiRazorscaleGUID = 0;
m_uiXT002GUID = 0;
m_uiKologarnGUID = 0;
m_uiAuriayaGUID = 0;
m_uiMimironGUID = 0;
m_uiHodirGUID = 0;
m_uiThorimGUID = 0;
m_uiFreyaGUID = 0;
m_uiVezaxGUID = 0;
m_uiYoggSaronGUID = 0;
m_uiAlgalonGUID = 0;
KologarnChest = 0;
ThorimChest = 0;
HodirChest = 0;
FreyaChest = 0;
m_uiLeviathanGateGUID = 0;
flag = 0;
uiLeviathanGUID = 0;
uiIgnisGUID = 0;
uiRazorscaleGUID = 0;
uiXT002GUID = 0;
uiKologarnGUID = 0;
uiAuriayaGUID = 0;
uiMimironGUID = 0;
uiHodirGUID = 0;
uiThorimGUID = 0;
uiFreyaGUID = 0;
uiVezaxGUID = 0;
uiYoggSaronGUID = 0;
uiAlgalonGUID = 0;
uiKologarnChestGUID = 0;
uiKologarnChestGUID = 0;
uiHodirChestGUID = 0;
uiFreyaChestGUID = 0;
uiLeviathanGateGUID = 0;
flag = 0;
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
memset(&m_auiAssemblyGUIDs, 0, sizeof(m_auiAssemblyGUIDs));
memset(&m_uiLeviathanDoor, 0, sizeof(m_uiLeviathanDoor));
memset(&uiEncounter, 0, sizeof(uiEncounter));
memset(&uiAssemblyGUIDs, 0, sizeof(uiAssemblyGUIDs));
memset(&uiLeviathanDoor, 0, sizeof(uiLeviathanDoor));
}
bool IsEncounterInProgress() const
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
{
if (m_auiEncounter[i] == IN_PROGRESS)
if (uiEncounter[i] == IN_PROGRESS)
return true;
}
@@ -103,87 +106,95 @@ struct instance_ulduar : public ScriptedInstance
switch(pCreature->GetEntry())
{
case NPC_LEVIATHAN:
m_uiLeviathanGUID = pCreature->GetGUID();
uiLeviathanGUID = pCreature->GetGUID();
break;
case NPC_IGNIS:
m_uiIgnisGUID = pCreature->GetGUID();
uiIgnisGUID = pCreature->GetGUID();
break;
case NPC_RAZORSCALE:
m_uiRazorscaleGUID = pCreature->GetGUID();
uiRazorscaleGUID = pCreature->GetGUID();
break;
case NPC_XT002:
m_uiXT002GUID = pCreature->GetGUID();
uiXT002GUID = pCreature->GetGUID();
break;
// Assembly of Iron
case NPC_STEELBREAKER:
m_auiAssemblyGUIDs[0] = pCreature->GetGUID();
uiAssemblyGUIDs[0] = pCreature->GetGUID();
break;
case NPC_MOLGEIM:
m_auiAssemblyGUIDs[1] = pCreature->GetGUID();
uiAssemblyGUIDs[1] = pCreature->GetGUID();
break;
case NPC_BRUNDIR:
m_auiAssemblyGUIDs[2] = pCreature->GetGUID();
uiAssemblyGUIDs[2] = pCreature->GetGUID();
break;
case NPC_KOLOGARN:
m_uiKologarnGUID = pCreature->GetGUID();
uiKologarnGUID = pCreature->GetGUID();
break;
case NPC_AURIAYA:
m_uiAuriayaGUID = pCreature->GetGUID();
uiAuriayaGUID = pCreature->GetGUID();
break;
case NPC_MIMIRON:
m_uiMimironGUID = pCreature->GetGUID();
uiMimironGUID = pCreature->GetGUID();
break;
case NPC_HODIR:
m_uiHodirGUID = pCreature->GetGUID();
uiHodirGUID = pCreature->GetGUID();
break;
case NPC_THORIM:
m_uiThorimGUID = pCreature->GetGUID();
uiThorimGUID = pCreature->GetGUID();
break;
case NPC_FREYA:
m_uiFreyaGUID = pCreature->GetGUID();
uiFreyaGUID = pCreature->GetGUID();
break;
case NPC_VEZAX:
m_uiVezaxGUID = pCreature->GetGUID();
uiVezaxGUID = pCreature->GetGUID();
break;
case NPC_YOGGSARON:
m_uiYoggSaronGUID = pCreature->GetGUID();
uiYoggSaronGUID = pCreature->GetGUID();
break;
case NPC_ALGALON:
m_uiAlgalonGUID = pCreature->GetGUID();
uiAlgalonGUID = pCreature->GetGUID();
break;
}
}
void OnGameObjectCreate(GameObject* pGo, bool add)
void OnGameObjectCreate(GameObject* pGO, bool add)
{
switch(pGo->GetEntry())
switch(pGO->GetEntry())
{
case GO_Kologarn_CHEST_HERO: KologarnChest = add ? pGo : NULL; break;
case GO_Kologarn_CHEST: KologarnChest = add ? pGo : NULL; break;
case GO_Thorim_CHEST_HERO: ThorimChest = add ? pGo : NULL; break;
case GO_Thorim_CHEST: ThorimChest = add ? pGo : NULL; break;
case GO_Hodir_CHEST_HERO: HodirChest = add ? pGo : NULL; break;
case GO_Hodir_CHEST: HodirChest = add ? pGo : NULL; break;
case GO_Freya_CHEST_HERO: FreyaChest = add ? pGo : NULL; break;
case GO_Freya_CHEST: FreyaChest = add ? pGo : NULL; break;
case GO_KOLOGARN_CHEST_HERO:
case GO_KOLOGARN_CHEST:
uiKologarnChestGUID = add ? pGO->GetGUID() : NULL;
break;
case GO_THORIM_CHEST_HERO:
case GO_THORIM_CHEST:
uiThorimChestGUID = add ? pGO->GetGUID() : NULL;
break;
case GO_HODIR_CHEST_HERO:
case GO_HODIR_CHEST:
uiHodirChestGUID = add ? pGO->GetGUID() : NULL;
break;
case GO_FREYA_CHEST_HERO:
case GO_FREYA_CHEST:
uiFreyaChestGUID = add ? pGO->GetGUID() : NULL;
break;
case GO_LEVIATHAN_DOOR:
m_uiLeviathanDoor[flag] = pGo->GetGUID();
HandleGameObject(NULL, true, pGo);
uiLeviathanDoor[flag] = pGO->GetGUID();
HandleGameObject(NULL, true, pGO);
flag++;
if (flag == 7)
flag =0;
break;
case GO_LEVIATHAN_GATE:
m_uiLeviathanGateGUID = pGo->GetGUID();
HandleGameObject(NULL, false, pGo);
uiLeviathanGateGUID = pGO->GetGUID();
HandleGameObject(NULL, false, pGO);
break;
}
}
void ProcessEvent(GameObject* pGo, uint32 uiEventId)
void ProcessEvent(GameObject* pGO, uint32 uiEventId)
{
// Flame Leviathan's Tower Event triggers
Creature* pFlameLeviathan = instance->GetCreature(NPC_LEVIATHAN);
@@ -207,74 +218,63 @@ struct instance_ulduar : public ScriptedInstance
void SetData(uint32 type, uint32 data)
{
if (type != TYPE_COLOSSUS)
uiEncounter[type] = data;
switch(type)
{
case TYPE_LEVIATHAN:
if (data == IN_PROGRESS)
{
HandleGameObject(m_uiLeviathanDoor[0],false);
HandleGameObject(m_uiLeviathanDoor[1],false);
HandleGameObject(m_uiLeviathanDoor[2],false);
HandleGameObject(m_uiLeviathanDoor[3],false);
HandleGameObject(m_uiLeviathanDoor[4],false);
HandleGameObject(m_uiLeviathanDoor[5],false);
HandleGameObject(m_uiLeviathanDoor[6],false);
}
else
{
HandleGameObject(m_uiLeviathanDoor[0],true);
HandleGameObject(m_uiLeviathanDoor[1],true);
HandleGameObject(m_uiLeviathanDoor[2],true);
HandleGameObject(m_uiLeviathanDoor[3],true);
HandleGameObject(m_uiLeviathanDoor[4],true);
HandleGameObject(m_uiLeviathanDoor[5],true);
HandleGameObject(m_uiLeviathanDoor[6],true);
}
break;
case TYPE_IGNIS:
/*case TYPE_IGNIS:
case TYPE_RAZORSCALE:
case TYPE_XT002:
case TYPE_ASSEMBLY:
break;
case TYPE_KOLOGARN:
m_auiEncounter[TYPE_KOLOGARN] = data;
if (data == DONE && KologarnChest)
KologarnChest->SetRespawnTime(KologarnChest->GetRespawnDelay());
break;
case TYPE_AURIAYA:
case TYPE_MIMIRON:
break;
case TYPE_HODIR:
m_auiEncounter[TYPE_HODIR] = data;
if (data == DONE && HodirChest)
HodirChest->SetRespawnTime(HodirChest->GetRespawnDelay());
break;
case TYPE_THORIM:
m_auiEncounter[TYPE_THORIM] = data;
if (data == DONE && ThorimChest)
ThorimChest->SetRespawnTime(ThorimChest->GetRespawnDelay());
break;
case TYPE_FREYA:
m_auiEncounter[TYPE_FREYA] = data;
if (data == DONE && FreyaChest)
FreyaChest->SetRespawnTime(FreyaChest->GetRespawnDelay());
break;
case TYPE_VEZAX:
case TYPE_YOGGSARON:
break;*/
case TYPE_LEVIATHAN:
if (data == IN_PROGRESS)
{
for (uint8 uiI; uiI < 7; uiI++)
HandleGameObject(uiLeviathanDoor[uiI],false);
}
else
{
for (uint8 uiI; uiI < 7; uiI++)
HandleGameObject(uiLeviathanDoor[uiI],true);
}
break;
case TYPE_ALGALON:
m_auiEncounter[type] = data;
case TYPE_KOLOGARN:
if (data == DONE)
if (GameObject* pGO = instance->GetGameObject(uiKologarnChestGUID))
pGO->SetRespawnTime(pGO->GetRespawnDelay());
break;
case TYPE_HODIR:
if (data == DONE)
if (GameObject* pGO = instance->GetGameObject(uiHodirChestGUID))
pGO->SetRespawnTime(pGO->GetRespawnDelay());
break;
case TYPE_THORIM:
if (data == DONE)
if (GameObject* pGO = instance->GetGameObject(uiThorimChestGUID))
pGO->SetRespawnTime(pGO->GetRespawnDelay());
break;
case TYPE_FREYA:
if (data == DONE)
if (GameObject* pGO = instance->GetGameObject(uiFreyaChestGUID))
pGO->SetRespawnTime(pGO->GetRespawnDelay());
break;
case TYPE_COLOSSUS:
m_auiEncounter[TYPE_COLOSSUS] = data;
if (data == 2)
{
if (Creature* pBoss = instance->GetCreature(m_uiLeviathanGUID))
if (Creature* pBoss = instance->GetCreature(uiLeviathanGUID))
pBoss->AI()->DoAction(10);
if (GameObject* pGate = instance->GetGameObject(m_uiLeviathanGateGUID))
if (GameObject* pGate = instance->GetGameObject(uiLeviathanGateGUID))
pGate->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
}
break;
default:
break;
}
if (data == DONE)
@@ -284,7 +284,7 @@ struct instance_ulduar : public ScriptedInstance
std::ostringstream saveStream;
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
saveStream << m_auiEncounter[i] << " ";
saveStream << uiEncounter[i] << " ";
m_strInstData = saveStream.str();
@@ -297,24 +297,24 @@ struct instance_ulduar : public ScriptedInstance
{
switch(data)
{
case TYPE_LEVIATHAN: return m_uiLeviathanGUID;
case TYPE_IGNIS: return m_uiIgnisGUID;
case TYPE_RAZORSCALE: return m_uiRazorscaleGUID;
case TYPE_XT002: return m_uiXT002GUID;
case TYPE_KOLOGARN: return m_uiKologarnGUID;
case TYPE_AURIAYA: return m_uiAuriayaGUID;
case TYPE_MIMIRON: return m_uiMimironGUID;
case TYPE_HODIR: return m_uiMimironGUID;
case TYPE_THORIM: return m_uiThorimGUID;
case TYPE_FREYA: return m_uiFreyaGUID;
case TYPE_VEZAX: return m_uiVezaxGUID;
case TYPE_YOGGSARON: return m_uiYoggSaronGUID;
case TYPE_ALGALON: return m_uiAlgalonGUID;
case TYPE_LEVIATHAN: return uiLeviathanGUID;
case TYPE_IGNIS: return uiIgnisGUID;
case TYPE_RAZORSCALE: return uiRazorscaleGUID;
case TYPE_XT002: return uiXT002GUID;
case TYPE_KOLOGARN: return uiKologarnGUID;
case TYPE_AURIAYA: return uiAuriayaGUID;
case TYPE_MIMIRON: return uiMimironGUID;
case TYPE_HODIR: return uiMimironGUID;
case TYPE_THORIM: return uiThorimGUID;
case TYPE_FREYA: return uiFreyaGUID;
case TYPE_VEZAX: return uiVezaxGUID;
case TYPE_YOGGSARON: return uiYoggSaronGUID;
case TYPE_ALGALON: return uiAlgalonGUID;
// Assembly of Iron
case DATA_STEELBREAKER: return m_auiAssemblyGUIDs[0];
case DATA_MOLGEIM: return m_auiAssemblyGUIDs[1];
case DATA_BRUNDIR: return m_auiAssemblyGUIDs[2];
case DATA_STEELBREAKER: return uiAssemblyGUIDs[0];
case DATA_MOLGEIM: return uiAssemblyGUIDs[1];
case DATA_BRUNDIR: return uiAssemblyGUIDs[2];
}
return 0;
@@ -339,7 +339,7 @@ struct instance_ulduar : public ScriptedInstance
case TYPE_YOGGSARON:
case TYPE_ALGALON:
case TYPE_COLOSSUS:
return m_auiEncounter[type];
return uiEncounter[type];
}
return 0;
@@ -350,10 +350,10 @@ struct instance_ulduar : public ScriptedInstance
OUT_SAVE_INST_DATA;
std::ostringstream saveStream;
saveStream << "U U " << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3]
<< m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << m_auiEncounter[6] << " " << m_auiEncounter[7]
<< m_auiEncounter[8] << " " << m_auiEncounter[9] << " " << m_auiEncounter[10] << " " << m_auiEncounter[11]
<< m_auiEncounter[12] << " " << m_auiEncounter[13] << " " << m_auiEncounter[14];
saveStream << "U U " << uiEncounter[0] << " " << uiEncounter[1] << " " << uiEncounter[2] << " " << uiEncounter[3]
<< uiEncounter[4] << " " << uiEncounter[5] << " " << uiEncounter[6] << " " << uiEncounter[7]
<< uiEncounter[8] << " " << uiEncounter[9] << " " << uiEncounter[10] << " " << uiEncounter[11]
<< uiEncounter[12] << " " << uiEncounter[13] << " " << uiEncounter[14];
m_strInstData = saveStream.str();
@@ -383,10 +383,10 @@ struct instance_ulduar : public ScriptedInstance
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
{
loadStream >> m_auiEncounter[i];
loadStream >> uiEncounter[i];
if (m_auiEncounter[i] == IN_PROGRESS)
m_auiEncounter[i] = NOT_STARTED;
if (uiEncounter[i] == IN_PROGRESS)
uiEncounter[i] = NOT_STARTED;
}
}
OUT_LOAD_INST_DATA_COMPLETE;