Scripts: Removed CAST_PET and CAST_INST

This commit is contained in:
Shauren
2011-05-25 16:22:13 +02:00
parent 64adce7b8b
commit 9cc7f25b9a
6 changed files with 67 additions and 50 deletions
@@ -24,13 +24,9 @@
#include "CreatureAIImpl.h" #include "CreatureAIImpl.h"
#include "InstanceScript.h" #include "InstanceScript.h"
#define SCRIPT_CAST_TYPE dynamic_cast #define CAST_PLR(a) (dynamic_cast<Player*>(a))
#define CAST_CRE(a) (dynamic_cast<Creature*>(a))
#define CAST_PLR(a) (SCRIPT_CAST_TYPE<Player*>(a)) #define CAST_AI(a, b) (dynamic_cast<a*>(b))
#define CAST_CRE(a) (SCRIPT_CAST_TYPE<Creature*>(a))
#define CAST_PET(a) (SCRIPT_CAST_TYPE<Pet*>(a))
#define CAST_AI(a, b) (SCRIPT_CAST_TYPE<a*>(b))
#define CAST_INST(a, b) (SCRIPT_CAST_TYPE<a*>(b))
#define GET_SPELL(a) (const_cast<SpellEntry*>(GetSpellStore()->LookupEntry(a))) #define GET_SPELL(a) (const_cast<SpellEntry*>(GetSpellStore()->LookupEntry(a)))
@@ -79,7 +79,7 @@ public:
DoCast(me, SPELL_CONVERT_CREDIT); DoCast(me, SPELL_CONVERT_CREDIT);
if (me->isPet()) if (me->isPet())
CAST_PET(me)->SetDuration(7500); me->ToPet()->SetDuration(7500);
Credit = true; Credit = true;
} else Timer -= diff; } else Timer -= diff;
} }
@@ -37,7 +37,8 @@ enum Data64
DATA_MOORABI_STATUE, DATA_MOORABI_STATUE,
DATA_DRAKKARI_COLOSSUS_STATUE, DATA_DRAKKARI_COLOSSUS_STATUE,
DATA_DRAKKARI_COLOSSUS, DATA_DRAKKARI_COLOSSUS,
DATA_RUIN_DWELLER_DIED DATA_RUIN_DWELLER_DIED,
DATA_STATUE_ACTIVATE,
}; };
enum mainCreatures enum mainCreatures
@@ -307,18 +307,30 @@ public:
{ {
if (type == DATA_RUIN_DWELLER_DIED) if (type == DATA_RUIN_DWELLER_DIED)
DwellerGUIDs.erase(data); DwellerGUIDs.erase(data);
else if (type == DATA_STATUE_ACTIVATE)
{
toActivate = data;
timer = 3500;
++phase;
}
} }
uint32 GetData(uint32 type) uint32 GetData(uint32 type)
{ {
switch(type) switch(type)
{ {
case DATA_SLAD_RAN_EVENT: return m_auiEncounter[0]; case DATA_SLAD_RAN_EVENT:
case DATA_MOORABI_EVENT: return m_auiEncounter[1]; return m_auiEncounter[0];
case DATA_GAL_DARAH_EVENT: return m_auiEncounter[2]; case DATA_MOORABI_EVENT:
case DATA_DRAKKARI_COLOSSUS_EVENT: return m_auiEncounter[3]; return m_auiEncounter[1];
case DATA_ECK_THE_FEROCIOUS_EVENT: return m_auiEncounter[4]; case DATA_GAL_DARAH_EVENT:
case DATA_ALIVE_RUIN_DWELLERS: return DwellerGUIDs.size(); return m_auiEncounter[2];
case DATA_DRAKKARI_COLOSSUS_EVENT:
return m_auiEncounter[3];
case DATA_ECK_THE_FEROCIOUS_EVENT:
return m_auiEncounter[4];
case DATA_ALIVE_RUIN_DWELLERS:
return DwellerGUIDs.size();
} }
return 0; return 0;
@@ -328,13 +340,22 @@ public:
{ {
switch(type) switch(type)
{ {
case DATA_SLAD_RAN_ALTAR: return uiSladRanAltar; case DATA_SLAD_RAN_ALTAR:
case DATA_MOORABI_ALTAR: return uiMoorabiAltar; return uiSladRanAltar;
case DATA_DRAKKARI_COLOSSUS_ALTAR: return uiDrakkariColossusAltar; case DATA_MOORABI_ALTAR:
case DATA_SLAD_RAN_STATUE: return uiSladRanStatue; return uiMoorabiAltar;
case DATA_MOORABI_STATUE: return uiMoorabiStatue; case DATA_DRAKKARI_COLOSSUS_ALTAR:
case DATA_DRAKKARI_COLOSSUS_STATUE: return uiDrakkariColossusStatue; return uiDrakkariColossusAltar;
case DATA_DRAKKARI_COLOSSUS: return uiDrakkariColossus; case DATA_SLAD_RAN_STATUE:
return uiSladRanStatue;
case DATA_MOORABI_STATUE:
return uiMoorabiStatue;
case DATA_DRAKKARI_COLOSSUS_STATUE:
return uiDrakkariColossusStatue;
case DATA_DRAKKARI_COLOSSUS:
return uiDrakkariColossus;
case DATA_STATUE_ACTIVATE:
return toActivate;
} }
return 0; return 0;
@@ -396,17 +417,6 @@ public:
OUT_LOAD_INST_DATA_COMPLETE; OUT_LOAD_INST_DATA_COMPLETE;
} }
bool QueueActivation(uint64 guid, uint32 time)
{
if (timer)
return false;
toActivate = guid;
timer = time;
phase++;
return true;
}
void Update(uint32 diff) void Update(uint32 diff)
{ {
// Spawn the support for the bridge if necessary // Spawn the support for the bridge if necessary
@@ -426,7 +436,6 @@ public:
timer = 0; timer = 0;
if (toActivate == uiBridge) if (toActivate == uiBridge)
{ {
toActivate = 0;
GameObject* pBridge = instance->GetGameObject(uiBridge); GameObject* pBridge = instance->GetGameObject(uiBridge);
GameObject* pCollision = instance->GetGameObject(uiCollision); GameObject* pCollision = instance->GetGameObject(uiCollision);
GameObject* pSladRanStatue = instance->GetGameObject(uiSladRanStatue); GameObject* pSladRanStatue = instance->GetGameObject(uiSladRanStatue);
@@ -456,11 +465,13 @@ public:
{ {
spell = 57071; spell = 57071;
pAltar = instance->GetGameObject(uiSladRanAltar); pAltar = instance->GetGameObject(uiSladRanAltar);
} else if (toActivate == uiMoorabiStatue) }
else if (toActivate == uiMoorabiStatue)
{ {
spell = 57068; spell = 57068;
pAltar = instance->GetGameObject(uiMoorabiAltar); pAltar = instance->GetGameObject(uiMoorabiAltar);
} else if (toActivate == uiDrakkariColossusStatue) }
else if (toActivate == uiDrakkariColossusStatue)
{ {
spell = 57072; spell = 57072;
pAltar = instance->GetGameObject(uiDrakkariColossusAltar); pAltar = instance->GetGameObject(uiDrakkariColossusAltar);
@@ -479,14 +490,15 @@ public:
if (GameObject* statueGO = instance->GetGameObject(toActivate)) if (GameObject* statueGO = instance->GetGameObject(toActivate))
statueGO->SetGoState(GO_STATE_READY); statueGO->SetGoState(GO_STATE_READY);
toActivate = 0;
if (phase == 3) if (phase == 3)
QueueActivation(uiBridge, 3000); SetData64(DATA_STATUE_ACTIVATE, uiBridge);
else else
SaveToDB(); // Don't save in between last statue and bridge turning in case of crash leading to stuck instance SaveToDB(); // Don't save in between last statue and bridge turning in case of crash leading to stuck instance
} }
} else timer -= diff; toActivate = 0;
}
else
timer -= diff;
} }
GOState GetObjState(uint64 guid) GOState GetObjState(uint64 guid)
@@ -514,14 +526,22 @@ public:
if (pInstance) if (pInstance)
{ {
switch(pGO->GetEntry()) switch (pGO->GetEntry())
{ {
case 192518: uiStatue = pInstance->GetData64(DATA_SLAD_RAN_STATUE); break; case 192518:
case 192519: uiStatue = pInstance->GetData64(DATA_MOORABI_STATUE); break; uiStatue = pInstance->GetData64(DATA_SLAD_RAN_STATUE);
case 192520: uiStatue = pInstance->GetData64(DATA_DRAKKARI_COLOSSUS_STATUE); break; break;
case 192519:
uiStatue = pInstance->GetData64(DATA_MOORABI_STATUE);
break;
case 192520:
uiStatue = pInstance->GetData64(DATA_DRAKKARI_COLOSSUS_STATUE);
break;
} }
if (CAST_INST(instance_gundrak::instance_gundrak_InstanceMapScript, pInstance)->QueueActivation(uiStatue, 3500))
if (!pInstance->GetData64(DATA_STATUE_ACTIVATE))
{ {
pInstance->SetData64(DATA_STATUE_ACTIVATE, uiStatue);
pGO->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1); pGO->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
pGO->SetGoState(GO_STATE_ACTIVE); pGO->SetGoState(GO_STATE_ACTIVE);
} }
@@ -862,11 +862,11 @@ class instance_icecrown_citadel : public InstanceMapScript
case CRITERIA_KILL_LANA_THEL_10M: case CRITERIA_KILL_LANA_THEL_10M:
case CRITERIA_ONCE_BITTEN_TWICE_SHY_10N: case CRITERIA_ONCE_BITTEN_TWICE_SHY_10N:
case CRITERIA_ONCE_BITTEN_TWICE_SHY_10V: case CRITERIA_ONCE_BITTEN_TWICE_SHY_10V:
return CAST_INST(InstanceMap, instance)->GetMaxPlayers() == 10; return instance->ToInstanceMap()->GetMaxPlayers() == 10;
case CRITERIA_KILL_LANA_THEL_25M: case CRITERIA_KILL_LANA_THEL_25M:
case CRITERIA_ONCE_BITTEN_TWICE_SHY_25N: case CRITERIA_ONCE_BITTEN_TWICE_SHY_25N:
case CRITERIA_ONCE_BITTEN_TWICE_SHY_25V: case CRITERIA_ONCE_BITTEN_TWICE_SHY_25V:
return CAST_INST(InstanceMap, instance)->GetMaxPlayers() == 25; return instance->ToInstanceMap()->GetMaxPlayers() == 25;
default: default:
break; break;
} }
@@ -1524,7 +1524,7 @@ public:
{ {
case 1: case 1:
if (me->isSummon()) if (me->isSummon())
if (Unit* pThassarian = me->ToTempSummon()(me)->GetSummoner()) if (Unit* pThassarian = me->ToTempSummon()->GetSummoner())
DoScriptText(SAY_THASSARIAN_4, pThassarian); DoScriptText(SAY_THASSARIAN_4, pThassarian);
uiPhaseTimer = 5000; uiPhaseTimer = 5000;
++Phase; ++Phase;