fix(Scripts/ObsidianSanctum): Code revamp [1/2] (#3634)

This commit is contained in:
Andrius Peleckas
2020-11-28 23:36:05 +02:00
committed by GitHub
parent 3b8fc40f3e
commit 01fa6257c8
4 changed files with 1136 additions and 943 deletions
@@ -0,0 +1,16 @@
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1604614793984918900');
-- Pyrobuffet (57557)
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=7 AND `SourceEntry`=57557 AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=26 AND `ConditionTarget`=0 AND `ConditionValue1`=1 AND `ConditionValue2`=0 AND `ConditionValue3`=0;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(13, 7, 57557, 0, 0, 26, 0, 1, 0, 0, 0, 0, 0, '', 'Pyrobuffet - Target players which has phase mask 1');
-- Twilight Torment (57935)
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=7 AND `SourceEntry`=57935 AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=26 AND `ConditionTarget`=0 AND `ConditionValue1`=1 AND `ConditionValue2`=0 AND `ConditionValue3`=0;
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceGroup`=0 AND `SourceEntry`=57935 AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=26 AND `ConditionTarget`=1 AND `ConditionValue1`=1 AND `ConditionValue2`=0 AND `ConditionValue3`=0;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(17, 0, 57935, 0, 0, 26, 1, 1, 0, 0, 0, 0, 0, '', 'Twilight Torment - Target players which has phase mask 1');
-- Twilight Shift aura removes Twilight Torment
DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=57620 AND `spell_effect`=-57935 AND `type`=0;
INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
(57620, -57935, 0, 'Twilight Shift aura removes Twilight Torment');
File diff suppressed because it is too large Load Diff
@@ -19,36 +19,29 @@ public:
struct instance_obsidian_sanctum_InstanceMapScript : public InstanceScript struct instance_obsidian_sanctum_InstanceMapScript : public InstanceScript
{ {
instance_obsidian_sanctum_InstanceMapScript(Map* pMap) : InstanceScript(pMap) {} instance_obsidian_sanctum_InstanceMapScript(Map* pMap) : InstanceScript(pMap),
m_uiSartharionGUID(0),
uint64 m_uiSartharionGUID; m_uiTenebronGUID(0),
uint64 m_uiTenebronGUID; m_uiShadronGUID(0),
uint64 m_uiShadronGUID; m_uiVesperonGUID(0),
uint64 m_uiVesperonGUID; m_uiPortalGUID(0),
uint32 Encounters[MAX_ENCOUNTERS]; portalCount(0)
uint64 m_uiPortalGUID;
uint8 portalCount;
void Initialize()
{ {
m_uiSartharionGUID = 0; SetBossNumber(MAX_ENCOUNTERS);
m_uiTenebronGUID = 0; }
m_uiShadronGUID = 0;
m_uiVesperonGUID = 0;
m_uiPortalGUID = 0;
portalCount = 0;
memset(&Encounters, 0, sizeof(Encounters));
};
bool IsEncounterInProgress() const bool IsEncounterInProgress() const override
{ {
if (Encounters[BOSS_SARTHARION_EVENT] == IN_PROGRESS) for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
return true; {
if (GetBossState(i) == IN_PROGRESS)
return true;
}
return false; return false;
} }
void OnCreatureCreate(Creature* pCreature) void OnCreatureCreate(Creature* pCreature) override
{ {
switch(pCreature->GetEntry()) switch(pCreature->GetEntry())
{ {
@@ -67,21 +60,7 @@ public:
} }
} }
uint32 GetData(uint32 id) const uint64 GetData64(uint32 uiData) const override
{
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
{ {
switch(uiData) switch(uiData)
{ {
@@ -97,7 +76,7 @@ public:
return 0; 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) switch(criteria_id)
{ {
@@ -105,109 +84,122 @@ public:
case 7326: case 7326:
// Gonna Go When the Volcano Blows (25 player) (2048) // Gonna Go When the Volcano Blows (25 player) (2048)
case 7327: case 7327:
if (Creature* cr = instance->GetCreature(m_uiSartharionGUID)) {
if (!cr->AI()->GetData(source->GetGUIDLow())) Creature const* sartharion = instance->GetCreature(m_uiSartharionGUID);
return true; return sartharion && !sartharion->AI()->GetData(source->GetGUIDLow());
break; }
// Less Is More (10 player) (624) // Less Is More (10 player) (624)
case 7189: case 7189:
case 7190: case 7190:
case 7191: case 7191:
case 522: case 522:
if (instance->GetPlayersCountExceptGMs() < 9) {
return true; return instance->GetPlayersCountExceptGMs() < 9;
break; }
// Less Is More (25 player) (1877) // Less Is More (25 player) (1877)
case 7185: case 7185:
case 7186: case 7186:
case 7187: case 7187:
case 7188: case 7188:
if (instance->GetPlayersCountExceptGMs() < 21) {
return true; return instance->GetPlayersCountExceptGMs() < 21;
break; }
// Twilight Assist (10 player) (2049) // Twilight Assist (10 player) (2049)
case 7328: case 7328:
// Twilight Assist (25 player) (2052) // Twilight Assist (25 player) (2052)
case 7331: case 7331:
if (Creature* cr = instance->GetCreature(m_uiSartharionGUID)) {
if (cr->AI()->GetData(DATA_ACHIEVEMENT_DRAGONS_COUNT) >= 1) Creature const* sartharion = instance->GetCreature(m_uiSartharionGUID);
return true; return sartharion && sartharion->AI()->GetData(DATA_ACHIEVEMENT_DRAGONS_COUNT) >= 1;
break; }
// Twilight Duo (10 player) (2050) // Twilight Duo (10 player) (2050)
case 7329: case 7329:
// Twilight Duo (25 player) (2053) // Twilight Duo (25 player) (2053)
case 7332: case 7332:
if (Creature* cr = instance->GetCreature(m_uiSartharionGUID)) {
if (cr->AI()->GetData(DATA_ACHIEVEMENT_DRAGONS_COUNT) >= 2) Creature const* sartharion = instance->GetCreature(m_uiSartharionGUID);
return true; return sartharion && sartharion->AI()->GetData(DATA_ACHIEVEMENT_DRAGONS_COUNT) >= 2;
break; }
// Twilight Zone (10 player) (2051) // Twilight Zone (10 player) (2051)
case 7330: case 7330:
// Twilight Zone (25 player) (2054) // Twilight Zone (25 player) (2054)
case 7333: case 7333:
if (Creature* cr = instance->GetCreature(m_uiSartharionGUID)) {
if (cr->AI()->GetData(DATA_ACHIEVEMENT_DRAGONS_COUNT) >= 3) Creature const* sartharion = instance->GetCreature(m_uiSartharionGUID);
return true; return sartharion && sartharion->AI()->GetData(DATA_ACHIEVEMENT_DRAGONS_COUNT) >= 3;
break; }
} }
return false; 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: return false;
case BOSS_TENEBRON_EVENT: }
case BOSS_SHADRON_EVENT:
case BOSS_VESPERON_EVENT: if (state == DONE)
Encounters[type] = data; {
break; SaveToDB();
case DATA_ADD_PORTAL: }
return true;
}
void DoAction(int32 action) override
{
switch (action)
{
case ACTION_ADD_PORTAL:
{
if (!m_uiPortalGUID) if (!m_uiPortalGUID)
{ {
if (Creature* cr = instance->GetCreature(m_uiSartharionGUID)) if (Creature* sartharion = 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 (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); sartharion->RemoveGameObject(portal, false);
m_uiPortalGUID = go->GetGUID(); m_uiPortalGUID = portal->GetGUID();
} }
}
portalCount = 0; portalCount = 0;
} }
portalCount++; ++portalCount;
break; break;
case DATA_CLEAR_PORTAL: }
portalCount--; case ACTION_CLEAR_PORTAL:
if (!portalCount || data == 2) {
--portalCount;
if (!portalCount)
{ {
if (GameObject* go = instance->GetGameObject(m_uiPortalGUID)) if (GameObject* go = instance->GetGameObject(m_uiPortalGUID))
{
go->Delete(); go->Delete();
}
DoRemoveAurasDueToSpellOnPlayers(SPELL_TWILIGHT_SHIFT); DoRemoveAurasDueToSpellOnPlayers(SPELL_TWILIGHT_SHIFT);
m_uiPortalGUID = 0; m_uiPortalGUID = 0;
} }
break; break;
}
} }
if (data == DONE)
SaveToDB();
} }
std::string GetSaveData() std::string GetSaveData() override
{ {
OUT_SAVE_INST_DATA; OUT_SAVE_INST_DATA;
std::ostringstream saveStream; std::ostringstream saveStream;
saveStream << "O S " << Encounters[0] << ' ' << Encounters[1] << ' ' << Encounters[2] << ' ' << Encounters[3]; saveStream << "O S " << GetBossSaveData();
OUT_SAVE_INST_DATA_COMPLETE; OUT_SAVE_INST_DATA_COMPLETE;
return saveStream.str(); return saveStream.str();
} }
void Load(const char* strIn) void Load(const char* strIn) override
{ {
if (!strIn) if (!strIn)
{ {
@@ -226,14 +218,25 @@ public:
{ {
for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
{ {
loadStream >> Encounters[i]; uint32 temp;
if (Encounters[i] == IN_PROGRESS) loadStream >> temp;
Encounters[i] = NOT_STARTED; if (temp == IN_PROGRESS)
temp = NOT_STARTED;
SetBossState(i, static_cast<EncounterState>(temp));
} }
} }
OUT_LOAD_INST_DATA_COMPLETE; 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 #ifndef DEF_OBSIDIAN_SANCTUM_H
#define DEF_OBSIDIAN_SANCTUM_H #define DEF_OBSIDIAN_SANCTUM_H
enum Data enum Data : uint32
{ {
// Encounter // Encounters
BOSS_SARTHARION_EVENT = 0, DATA_SARTHARION = 0,
BOSS_TENEBRON_EVENT = 1, DATA_TENEBRON = 1,
BOSS_VESPERON_EVENT = 2, DATA_VESPERON = 2,
BOSS_SHADRON_EVENT = 3, DATA_SHADRON = 3,
MAX_ENCOUNTERS = 4, 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 // Achievements
DATA_ACHIEVEMENT_DRAGONS_COUNT = 30, DATA_ACHIEVEMENT_DRAGONS_COUNT = 30,
DATA_VOLCANO_BLOWS = 31, DATA_VOLCANO_BLOWS = 31,
@@ -44,4 +34,10 @@ enum Data
SPELL_TWILIGHT_TORMENT_SARTHARION = 58835, SPELL_TWILIGHT_TORMENT_SARTHARION = 58835,
}; };
enum OSActions
{
// Portal
ACTION_CLEAR_PORTAL = -1,
ACTION_ADD_PORTAL = -2,
};
#endif #endif