diff options
Diffstat (limited to 'src')
6 files changed, 67 insertions, 50 deletions
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index c0472d6ddee..fad3388a187 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -24,13 +24,9 @@ #include "CreatureAIImpl.h" #include "InstanceScript.h" -#define SCRIPT_CAST_TYPE dynamic_cast - -#define CAST_PLR(a) (SCRIPT_CAST_TYPE<Player*>(a)) -#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 CAST_PLR(a) (dynamic_cast<Player*>(a)) +#define CAST_CRE(a) (dynamic_cast<Creature*>(a)) +#define CAST_AI(a, b) (dynamic_cast<a*>(b)) #define GET_SPELL(a) (const_cast<SpellEntry*>(GetSpellStore()->LookupEntry(a))) diff --git a/src/server/scripts/EasternKingdoms/isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/isle_of_queldanas.cpp index 7fbf32875e1..4b29e2d71f9 100644 --- a/src/server/scripts/EasternKingdoms/isle_of_queldanas.cpp +++ b/src/server/scripts/EasternKingdoms/isle_of_queldanas.cpp @@ -79,7 +79,7 @@ public: DoCast(me, SPELL_CONVERT_CREDIT); if (me->isPet()) - CAST_PET(me)->SetDuration(7500); + me->ToPet()->SetDuration(7500); Credit = true; } else Timer -= diff; } diff --git a/src/server/scripts/Northrend/Gundrak/gundrak.h b/src/server/scripts/Northrend/Gundrak/gundrak.h index 2596e4d9fbd..08cdd24c724 100644 --- a/src/server/scripts/Northrend/Gundrak/gundrak.h +++ b/src/server/scripts/Northrend/Gundrak/gundrak.h @@ -37,7 +37,8 @@ enum Data64 DATA_MOORABI_STATUE, DATA_DRAKKARI_COLOSSUS_STATUE, DATA_DRAKKARI_COLOSSUS, - DATA_RUIN_DWELLER_DIED + DATA_RUIN_DWELLER_DIED, + DATA_STATUE_ACTIVATE, }; enum mainCreatures diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp index a0fdb4cce7b..2a4bdc45239 100644 --- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp +++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp @@ -306,19 +306,31 @@ public: void SetData64(uint32 type, uint64 data) { 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) { switch(type) { - case DATA_SLAD_RAN_EVENT: return m_auiEncounter[0]; - case DATA_MOORABI_EVENT: return m_auiEncounter[1]; - case DATA_GAL_DARAH_EVENT: 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(); + case DATA_SLAD_RAN_EVENT: + return m_auiEncounter[0]; + case DATA_MOORABI_EVENT: + return m_auiEncounter[1]; + case DATA_GAL_DARAH_EVENT: + 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; @@ -328,13 +340,22 @@ public: { switch(type) { - case DATA_SLAD_RAN_ALTAR: return uiSladRanAltar; - case DATA_MOORABI_ALTAR: return uiMoorabiAltar; - case DATA_DRAKKARI_COLOSSUS_ALTAR: return uiDrakkariColossusAltar; - 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_SLAD_RAN_ALTAR: + return uiSladRanAltar; + case DATA_MOORABI_ALTAR: + return uiMoorabiAltar; + case DATA_DRAKKARI_COLOSSUS_ALTAR: + return uiDrakkariColossusAltar; + 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; @@ -396,17 +417,6 @@ public: 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) { // Spawn the support for the bridge if necessary @@ -426,7 +436,6 @@ public: timer = 0; if (toActivate == uiBridge) { - toActivate = 0; GameObject* pBridge = instance->GetGameObject(uiBridge); GameObject* pCollision = instance->GetGameObject(uiCollision); GameObject* pSladRanStatue = instance->GetGameObject(uiSladRanStatue); @@ -456,11 +465,13 @@ public: { spell = 57071; pAltar = instance->GetGameObject(uiSladRanAltar); - } else if (toActivate == uiMoorabiStatue) + } + else if (toActivate == uiMoorabiStatue) { spell = 57068; pAltar = instance->GetGameObject(uiMoorabiAltar); - } else if (toActivate == uiDrakkariColossusStatue) + } + else if (toActivate == uiDrakkariColossusStatue) { spell = 57072; pAltar = instance->GetGameObject(uiDrakkariColossusAltar); @@ -479,14 +490,15 @@ public: if (GameObject* statueGO = instance->GetGameObject(toActivate)) statueGO->SetGoState(GO_STATE_READY); - toActivate = 0; - if (phase == 3) - QueueActivation(uiBridge, 3000); + SetData64(DATA_STATUE_ACTIVATE, uiBridge); else 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) @@ -514,14 +526,22 @@ public: if (pInstance) { - switch(pGO->GetEntry()) + switch (pGO->GetEntry()) { - case 192518: uiStatue = pInstance->GetData64(DATA_SLAD_RAN_STATUE); break; - case 192519: uiStatue = pInstance->GetData64(DATA_MOORABI_STATUE); break; - case 192520: uiStatue = pInstance->GetData64(DATA_DRAKKARI_COLOSSUS_STATUE); break; + case 192518: + uiStatue = pInstance->GetData64(DATA_SLAD_RAN_STATUE); + 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->SetGoState(GO_STATE_ACTIVE); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 190162c7d30..ece75fc0b9f 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -862,11 +862,11 @@ class instance_icecrown_citadel : public InstanceMapScript case CRITERIA_KILL_LANA_THEL_10M: case CRITERIA_ONCE_BITTEN_TWICE_SHY_10N: 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_ONCE_BITTEN_TWICE_SHY_25N: case CRITERIA_ONCE_BITTEN_TWICE_SHY_25V: - return CAST_INST(InstanceMap, instance)->GetMaxPlayers() == 25; + return instance->ToInstanceMap()->GetMaxPlayers() == 25; default: break; } diff --git a/src/server/scripts/Northrend/borean_tundra.cpp b/src/server/scripts/Northrend/borean_tundra.cpp index 19c746924bb..73a2e4ac203 100644 --- a/src/server/scripts/Northrend/borean_tundra.cpp +++ b/src/server/scripts/Northrend/borean_tundra.cpp @@ -1524,7 +1524,7 @@ public: { case 1: if (me->isSummon()) - if (Unit* pThassarian = me->ToTempSummon()(me)->GetSummoner()) + if (Unit* pThassarian = me->ToTempSummon()->GetSummoner()) DoScriptText(SAY_THASSARIAN_4, pThassarian); uiPhaseTimer = 5000; ++Phase; |