mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-17 02:50:29 +00:00
fix(Scripts/ObsidianSanctum): Code revamp [1/2] (#3634)
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -19,36 +19,29 @@ public:
|
||||
|
||||
struct instance_obsidian_sanctum_InstanceMapScript : public InstanceScript
|
||||
{
|
||||
instance_obsidian_sanctum_InstanceMapScript(Map* pMap) : InstanceScript(pMap) {}
|
||||
|
||||
uint64 m_uiSartharionGUID;
|
||||
uint64 m_uiTenebronGUID;
|
||||
uint64 m_uiShadronGUID;
|
||||
uint64 m_uiVesperonGUID;
|
||||
uint32 Encounters[MAX_ENCOUNTERS];
|
||||
uint64 m_uiPortalGUID;
|
||||
uint8 portalCount;
|
||||
|
||||
void Initialize()
|
||||
instance_obsidian_sanctum_InstanceMapScript(Map* pMap) : InstanceScript(pMap),
|
||||
m_uiSartharionGUID(0),
|
||||
m_uiTenebronGUID(0),
|
||||
m_uiShadronGUID(0),
|
||||
m_uiVesperonGUID(0),
|
||||
m_uiPortalGUID(0),
|
||||
portalCount(0)
|
||||
{
|
||||
m_uiSartharionGUID = 0;
|
||||
m_uiTenebronGUID = 0;
|
||||
m_uiShadronGUID = 0;
|
||||
m_uiVesperonGUID = 0;
|
||||
m_uiPortalGUID = 0;
|
||||
portalCount = 0;
|
||||
memset(&Encounters, 0, sizeof(Encounters));
|
||||
};
|
||||
SetBossNumber(MAX_ENCOUNTERS);
|
||||
}
|
||||
|
||||
bool IsEncounterInProgress() const
|
||||
bool IsEncounterInProgress() const override
|
||||
{
|
||||
if (Encounters[BOSS_SARTHARION_EVENT] == IN_PROGRESS)
|
||||
return true;
|
||||
for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
|
||||
{
|
||||
if (GetBossState(i) == IN_PROGRESS)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* pCreature)
|
||||
void OnCreatureCreate(Creature* pCreature) override
|
||||
{
|
||||
switch(pCreature->GetEntry())
|
||||
{
|
||||
@@ -67,21 +60,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 id) const
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
case BOSS_SARTHARION_EVENT:
|
||||
case BOSS_TENEBRON_EVENT:
|
||||
case BOSS_SHADRON_EVENT:
|
||||
case BOSS_VESPERON_EVENT:
|
||||
return Encounters[id];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64 GetData64(uint32 uiData) const
|
||||
uint64 GetData64(uint32 uiData) const override
|
||||
{
|
||||
switch(uiData)
|
||||
{
|
||||
@@ -97,7 +76,7 @@ public:
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* source, Unit const* /*target*/, uint32 /*miscvalue1*/)
|
||||
bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* source, Unit const* /*target*/, uint32 /*miscvalue1*/) override
|
||||
{
|
||||
switch(criteria_id)
|
||||
{
|
||||
@@ -105,109 +84,122 @@ public:
|
||||
case 7326:
|
||||
// Gonna Go When the Volcano Blows (25 player) (2048)
|
||||
case 7327:
|
||||
if (Creature* cr = instance->GetCreature(m_uiSartharionGUID))
|
||||
if (!cr->AI()->GetData(source->GetGUIDLow()))
|
||||
return true;
|
||||
break;
|
||||
{
|
||||
Creature const* sartharion = instance->GetCreature(m_uiSartharionGUID);
|
||||
return sartharion && !sartharion->AI()->GetData(source->GetGUIDLow());
|
||||
}
|
||||
// Less Is More (10 player) (624)
|
||||
case 7189:
|
||||
case 7190:
|
||||
case 7191:
|
||||
case 522:
|
||||
if (instance->GetPlayersCountExceptGMs() < 9)
|
||||
return true;
|
||||
break;
|
||||
{
|
||||
return instance->GetPlayersCountExceptGMs() < 9;
|
||||
}
|
||||
// Less Is More (25 player) (1877)
|
||||
case 7185:
|
||||
case 7186:
|
||||
case 7187:
|
||||
case 7188:
|
||||
if (instance->GetPlayersCountExceptGMs() < 21)
|
||||
return true;
|
||||
break;
|
||||
{
|
||||
return instance->GetPlayersCountExceptGMs() < 21;
|
||||
}
|
||||
// Twilight Assist (10 player) (2049)
|
||||
case 7328:
|
||||
// Twilight Assist (25 player) (2052)
|
||||
case 7331:
|
||||
if (Creature* cr = instance->GetCreature(m_uiSartharionGUID))
|
||||
if (cr->AI()->GetData(DATA_ACHIEVEMENT_DRAGONS_COUNT) >= 1)
|
||||
return true;
|
||||
break;
|
||||
{
|
||||
Creature const* sartharion = instance->GetCreature(m_uiSartharionGUID);
|
||||
return sartharion && sartharion->AI()->GetData(DATA_ACHIEVEMENT_DRAGONS_COUNT) >= 1;
|
||||
}
|
||||
// Twilight Duo (10 player) (2050)
|
||||
case 7329:
|
||||
// Twilight Duo (25 player) (2053)
|
||||
case 7332:
|
||||
if (Creature* cr = instance->GetCreature(m_uiSartharionGUID))
|
||||
if (cr->AI()->GetData(DATA_ACHIEVEMENT_DRAGONS_COUNT) >= 2)
|
||||
return true;
|
||||
break;
|
||||
{
|
||||
Creature const* sartharion = instance->GetCreature(m_uiSartharionGUID);
|
||||
return sartharion && sartharion->AI()->GetData(DATA_ACHIEVEMENT_DRAGONS_COUNT) >= 2;
|
||||
}
|
||||
// Twilight Zone (10 player) (2051)
|
||||
case 7330:
|
||||
// Twilight Zone (25 player) (2054)
|
||||
case 7333:
|
||||
if (Creature* cr = instance->GetCreature(m_uiSartharionGUID))
|
||||
if (cr->AI()->GetData(DATA_ACHIEVEMENT_DRAGONS_COUNT) >= 3)
|
||||
return true;
|
||||
break;
|
||||
|
||||
{
|
||||
Creature const* sartharion = instance->GetCreature(m_uiSartharionGUID);
|
||||
return sartharion && sartharion->AI()->GetData(DATA_ACHIEVEMENT_DRAGONS_COUNT) >= 3;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
bool SetBossState(uint32 type, EncounterState state) override
|
||||
{
|
||||
switch(type)
|
||||
if (InstanceScript::SetBossState(type, state))
|
||||
{
|
||||
case BOSS_SARTHARION_EVENT:
|
||||
case BOSS_TENEBRON_EVENT:
|
||||
case BOSS_SHADRON_EVENT:
|
||||
case BOSS_VESPERON_EVENT:
|
||||
Encounters[type] = data;
|
||||
break;
|
||||
case DATA_ADD_PORTAL:
|
||||
return false;
|
||||
}
|
||||
|
||||
if (state == DONE)
|
||||
{
|
||||
SaveToDB();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void DoAction(int32 action) override
|
||||
{
|
||||
switch (action)
|
||||
{
|
||||
case ACTION_ADD_PORTAL:
|
||||
{
|
||||
if (!m_uiPortalGUID)
|
||||
{
|
||||
if (Creature* cr = instance->GetCreature(m_uiSartharionGUID))
|
||||
if (GameObject* go = cr->SummonGameObject(GO_TWILIGHT_PORTAL, 3247.29f, 529.804f, 58.9595f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0))
|
||||
if (Creature* sartharion = instance->GetCreature(m_uiSartharionGUID))
|
||||
{
|
||||
if (GameObject* portal = sartharion->SummonGameObject(GO_TWILIGHT_PORTAL, 3247.29f, 529.804f, 58.9595f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0))
|
||||
{
|
||||
cr->RemoveGameObject(go, false);
|
||||
m_uiPortalGUID = go->GetGUID();
|
||||
sartharion->RemoveGameObject(portal, false);
|
||||
m_uiPortalGUID = portal->GetGUID();
|
||||
}
|
||||
}
|
||||
|
||||
portalCount = 0;
|
||||
}
|
||||
|
||||
portalCount++;
|
||||
++portalCount;
|
||||
break;
|
||||
case DATA_CLEAR_PORTAL:
|
||||
portalCount--;
|
||||
if (!portalCount || data == 2)
|
||||
}
|
||||
case ACTION_CLEAR_PORTAL:
|
||||
{
|
||||
--portalCount;
|
||||
if (!portalCount)
|
||||
{
|
||||
if (GameObject* go = instance->GetGameObject(m_uiPortalGUID))
|
||||
{
|
||||
go->Delete();
|
||||
}
|
||||
|
||||
DoRemoveAurasDueToSpellOnPlayers(SPELL_TWILIGHT_SHIFT);
|
||||
m_uiPortalGUID = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (data == DONE)
|
||||
SaveToDB();
|
||||
}
|
||||
|
||||
std::string GetSaveData()
|
||||
std::string GetSaveData() override
|
||||
{
|
||||
OUT_SAVE_INST_DATA;
|
||||
|
||||
std::ostringstream saveStream;
|
||||
saveStream << "O S " << Encounters[0] << ' ' << Encounters[1] << ' ' << Encounters[2] << ' ' << Encounters[3];
|
||||
saveStream << "O S " << GetBossSaveData();
|
||||
|
||||
OUT_SAVE_INST_DATA_COMPLETE;
|
||||
return saveStream.str();
|
||||
}
|
||||
|
||||
void Load(const char* strIn)
|
||||
void Load(const char* strIn) override
|
||||
{
|
||||
if (!strIn)
|
||||
{
|
||||
@@ -226,14 +218,25 @@ public:
|
||||
{
|
||||
for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
|
||||
{
|
||||
loadStream >> Encounters[i];
|
||||
if (Encounters[i] == IN_PROGRESS)
|
||||
Encounters[i] = NOT_STARTED;
|
||||
uint32 temp;
|
||||
loadStream >> temp;
|
||||
if (temp == IN_PROGRESS)
|
||||
temp = NOT_STARTED;
|
||||
|
||||
SetBossState(i, static_cast<EncounterState>(temp));
|
||||
}
|
||||
}
|
||||
|
||||
OUT_LOAD_INST_DATA_COMPLETE;
|
||||
}
|
||||
|
||||
private:
|
||||
uint64 m_uiSartharionGUID;
|
||||
uint64 m_uiTenebronGUID;
|
||||
uint64 m_uiShadronGUID;
|
||||
uint64 m_uiVesperonGUID;
|
||||
uint64 m_uiPortalGUID;
|
||||
uint8 portalCount;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -5,25 +5,15 @@
|
||||
#ifndef DEF_OBSIDIAN_SANCTUM_H
|
||||
#define DEF_OBSIDIAN_SANCTUM_H
|
||||
|
||||
enum Data
|
||||
enum Data : uint32
|
||||
{
|
||||
// Encounter
|
||||
BOSS_SARTHARION_EVENT = 0,
|
||||
BOSS_TENEBRON_EVENT = 1,
|
||||
BOSS_VESPERON_EVENT = 2,
|
||||
BOSS_SHADRON_EVENT = 3,
|
||||
// Encounters
|
||||
DATA_SARTHARION = 0,
|
||||
DATA_TENEBRON = 1,
|
||||
DATA_VESPERON = 2,
|
||||
DATA_SHADRON = 3,
|
||||
MAX_ENCOUNTERS = 4,
|
||||
|
||||
// GUIDs
|
||||
DATA_SARTHARION = 10,
|
||||
DATA_TENEBRON = 11,
|
||||
DATA_SHADRON = 12,
|
||||
DATA_VESPERON = 13,
|
||||
|
||||
// Portal
|
||||
DATA_CLEAR_PORTAL = 20,
|
||||
DATA_ADD_PORTAL = 21,
|
||||
|
||||
// Achievements
|
||||
DATA_ACHIEVEMENT_DRAGONS_COUNT = 30,
|
||||
DATA_VOLCANO_BLOWS = 31,
|
||||
@@ -44,4 +34,10 @@ enum Data
|
||||
SPELL_TWILIGHT_TORMENT_SARTHARION = 58835,
|
||||
};
|
||||
|
||||
enum OSActions
|
||||
{
|
||||
// Portal
|
||||
ACTION_CLEAR_PORTAL = -1,
|
||||
ACTION_ADD_PORTAL = -2,
|
||||
};
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user