fix(Scripts/ObsidianSanctum): Code revamp [1/2] (#3634)
This commit is contained in:
@@ -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');
|
||||||
+1012
-834
File diff suppressed because it is too large
Load Diff
+91
-88
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user