aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbibi <125542784+14shagov@users.noreply.github.com>2024-02-23 22:05:03 +0300
committerGitHub <noreply@github.com>2024-02-23 20:05:03 +0100
commita666bdfc31f8df005a73c50d78a5c16dcec2c81c (patch)
tree8e3f136b28b5aa194e780bece51a4c07e4cd7e17
parente835ab5014345962d84590cdd2ce71cc27608c80 (diff)
Scripts/Sunken Temple: fix Shade of Eranikus and Jammal'an the Prophet (#29663)
* Also minor modernization for instance script Co-authored-by: 14shagov <14shagov> Co-authored-by: Shauren <shauren.trinity@gmail.com>
-rw-r--r--sql/updates/world/3.3.5/2024_02_23_00_world.sql5
-rw-r--r--src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp165
-rw-r--r--src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h54
3 files changed, 183 insertions, 41 deletions
diff --git a/sql/updates/world/3.3.5/2024_02_23_00_world.sql b/sql/updates/world/3.3.5/2024_02_23_00_world.sql
new file mode 100644
index 00000000000..c07b9498e2a
--- /dev/null
+++ b/sql/updates/world/3.3.5/2024_02_23_00_world.sql
@@ -0,0 +1,5 @@
+SET @GUID := 11011; -- (unused GUID from TDB 335.24011)
+
+DELETE FROM `gameobject` WHERE `guid` = @GUID;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`) VALUES
+(@GUID, 149431, 109, 0, 0, 1, 1, -518.154, -85.2353, -74.488, 3.14159, -0, -0, -1, -0.00000126759, 43200, 100, 1, '', 0);
diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp
index 47ec2889161..a81c3c34c8b 100644
--- a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp
+++ b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp
@@ -23,26 +23,27 @@ SDCategory: Sunken Temple
EndScriptData */
#include "ScriptMgr.h"
+#include "Creature.h"
#include "GameObject.h"
#include "InstanceScript.h"
#include "Map.h"
#include "sunken_temple.h"
-enum Gameobject
+static constexpr DoorData doorData[] =
{
- GO_ATALAI_STATUE1 = 148830,
- GO_ATALAI_STATUE2 = 148831,
- GO_ATALAI_STATUE3 = 148832,
- GO_ATALAI_STATUE4 = 148833,
- GO_ATALAI_STATUE5 = 148834,
- GO_ATALAI_STATUE6 = 148835,
- GO_ATALAI_LIGHT1 = 148883,
- GO_ATALAI_LIGHT2 = 148937
+ { GO_FORCEFIELD, BOSS_EVENT_ELITE_TROLLS, DOOR_TYPE_PASSAGE },
+ { 0, 0, DOOR_TYPE_ROOM } // END
};
-enum CreatureIds
+static constexpr ObjectData gameObjects[] =
{
- NPC_ATALALARION = 8580
+ { GO_ATALAI_STATUE1, GO_ATALAI_STATUE1 },
+ { GO_ATALAI_STATUE2, GO_ATALAI_STATUE2 },
+ { GO_ATALAI_STATUE3, GO_ATALAI_STATUE3 },
+ { GO_ATALAI_STATUE4, GO_ATALAI_STATUE4 },
+ { GO_ATALAI_STATUE5, GO_ATALAI_STATUE5 },
+ { GO_ATALAI_STATUE6, GO_ATALAI_STATUE6 },
+ { 0, 0 }
};
static Position const atalalarianPos = { -466.5134f, 95.19822f, -189.6463f, 0.03490658f };
@@ -72,6 +73,9 @@ public:
instance_sunken_temple_InstanceMapScript(InstanceMap* map) : InstanceScript(map)
{
SetHeaders(DataHeader);
+ SetBossNumber(MAX_ENCOUNTER);
+ LoadDoorData(doorData);
+ LoadObjectData(nullptr, gameObjects);
State = 0;
s1 = false;
@@ -80,14 +84,12 @@ public:
s4 = false;
s5 = false;
s6 = false;
+ EliteTrollsKilled = 0;
}
- ObjectGuid GOAtalaiStatue1;
- ObjectGuid GOAtalaiStatue2;
- ObjectGuid GOAtalaiStatue3;
- ObjectGuid GOAtalaiStatue4;
- ObjectGuid GOAtalaiStatue5;
- ObjectGuid GOAtalaiStatue6;
+ ObjectGuid JammalAnTheProphetGUID;
+ ObjectGuid ShadeOfEranikusGUID;
+ uint32 EliteTrollsKilled;
uint32 State;
@@ -98,16 +100,49 @@ public:
bool s5;
bool s6;
- void OnGameObjectCreate(GameObject* go) override
+ void OnUnitDeath(Unit* unit) override
{
- switch (go->GetEntry())
+ switch (unit->GetEntry())
{
- case GO_ATALAI_STATUE1: GOAtalaiStatue1 = go->GetGUID(); break;
- case GO_ATALAI_STATUE2: GOAtalaiStatue2 = go->GetGUID(); break;
- case GO_ATALAI_STATUE3: GOAtalaiStatue3 = go->GetGUID(); break;
- case GO_ATALAI_STATUE4: GOAtalaiStatue4 = go->GetGUID(); break;
- case GO_ATALAI_STATUE5: GOAtalaiStatue5 = go->GetGUID(); break;
- case GO_ATALAI_STATUE6: GOAtalaiStatue6 = go->GetGUID(); break;
+ case NPC_AVATAR_OF_HAKKAR: SetBossState(BOSS_AVATAR_OF_HAKKAR, DONE); break;
+ case NPC_JAMMALAN_THE_PROPHET: SetBossState(BOSS_JAMMALAN_THE_PROPHET, DONE); break;
+ case NPC_DREAMSCYTHE: SetBossState(BOSS_DREAMSCYTHE, DONE); break;
+ case NPC_WEAVER: SetBossState(BOSS_WEAVER, DONE); break;
+ case NPC_MORPHAZ: SetBossState(BOSS_MORPHAZ, DONE); break;
+ case NPC_HAZZAS: SetBossState(BOSS_HAZZAS, DONE); break;
+ case NPC_SHADE_OF_ERANIKUS: SetBossState(BOSS_SHADE_OF_ERANIKUS, DONE); break;
+ case NPC_ATALALARION: SetBossState(BOSS_ATALALARION, DONE); break;
+ case NPC_ZOLO:
+ case NPC_GASHER:
+ case NPC_LORO:
+ case NPC_HUKKU:
+ case NPC_ZUL_LOR:
+ case NPC_MIJAN: SetData(BOSS_EVENT_ELITE_TROLLS, EliteTrollsKilled + 1); break;
+ default: break;
+ }
+ }
+
+ void OnCreatureCreate(Creature* creature) override
+ {
+ InstanceScript::OnCreatureCreate(creature);
+
+ switch (creature->GetEntry())
+ {
+ case NPC_JAMMALAN_THE_PROPHET:
+ JammalAnTheProphetGUID = creature->GetGUID();
+ if (GetBossState(BOSS_EVENT_ELITE_TROLLS) != DONE)
+ {
+ creature->SetImmuneToPC(true);
+ creature->CastSpell(creature, SPELL_GREEN_CHANNELING);
+ }
+ break;
+ case NPC_SHADE_OF_ERANIKUS:
+ ShadeOfEranikusGUID = creature->GetGUID();
+ if (GetBossState(BOSS_JAMMALAN_THE_PROPHET) != DONE)
+ creature->SetImmuneToAll(true);
+ break;
+ default:
+ break;
}
}
@@ -118,34 +153,34 @@ public:
case GO_ATALAI_STATUE1:
if (!s1 && !s2 && !s3 && !s4 && !s5 && !s6)
{
- if (GameObject* pAtalaiStatue1 = instance->GetGameObject(GOAtalaiStatue1))
+ if (GameObject* pAtalaiStatue1 = GetGameObject(GO_ATALAI_STATUE1))
UseStatue(pAtalaiStatue1);
s1 = true;
State = 0;
- };
+ }
break;
case GO_ATALAI_STATUE2:
if (s1 && !s2 && !s3 && !s4 && !s5 && !s6)
{
- if (GameObject* pAtalaiStatue2 = instance->GetGameObject(GOAtalaiStatue2))
+ if (GameObject* pAtalaiStatue2 = GetGameObject(GO_ATALAI_STATUE2))
UseStatue(pAtalaiStatue2);
s2 = true;
State = 0;
- };
+ }
break;
case GO_ATALAI_STATUE3:
if (s1 && s2 && !s3 && !s4 && !s5 && !s6)
{
- if (GameObject* pAtalaiStatue3 = instance->GetGameObject(GOAtalaiStatue3))
+ if (GameObject* pAtalaiStatue3 = GetGameObject(GO_ATALAI_STATUE3))
UseStatue(pAtalaiStatue3);
s3 = true;
State = 0;
- };
+ }
break;
case GO_ATALAI_STATUE4:
if (s1 && s2 && s3 && !s4 && !s5 && !s6)
{
- if (GameObject* pAtalaiStatue4 = instance->GetGameObject(GOAtalaiStatue4))
+ if (GameObject* pAtalaiStatue4 = GetGameObject(GO_ATALAI_STATUE4))
UseStatue(pAtalaiStatue4);
s4 = true;
State = 0;
@@ -154,7 +189,7 @@ public:
case GO_ATALAI_STATUE5:
if (s1 && s2 && s3 && s4 && !s5 && !s6)
{
- if (GameObject* pAtalaiStatue5 = instance->GetGameObject(GOAtalaiStatue5))
+ if (GameObject* pAtalaiStatue5 = GetGameObject(GO_ATALAI_STATUE5))
UseStatue(pAtalaiStatue5);
s5 = true;
State = 0;
@@ -163,7 +198,7 @@ public:
case GO_ATALAI_STATUE6:
if (s1 && s2 && s3 && s4 && s5 && !s6)
{
- if (GameObject* pAtalaiStatue6 = instance->GetGameObject(GOAtalaiStatue6))
+ if (GameObject* pAtalaiStatue6 = GetGameObject(GO_ATALAI_STATUE6))
{
UseStatue(pAtalaiStatue6);
UseLastStatue(pAtalaiStatue6);
@@ -173,7 +208,7 @@ public:
}
break;
}
- };
+ }
void UseStatue(GameObject* go)
{
@@ -189,20 +224,70 @@ public:
go->SummonCreature(NPC_ATALALARION, atalalarianPos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10min);
}
+ bool SetBossState(uint32 type, EncounterState state) override
+ {
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+
+ switch (type)
+ {
+ case BOSS_JAMMALAN_THE_PROPHET:
+ if (state == DONE)
+ if (Creature* creature = instance->GetCreature(ShadeOfEranikusGUID))
+ creature->SetImmuneToAll(false);
+ break;
+ default:
+ break;
+ }
+ return true;
+ }
+
void SetData(uint32 type, uint32 data) override
{
- if (type == EVENT_STATE)
- State = data;
+ switch (type)
+ {
+ case EVENT_STATE:
+ State = data;
+ break;
+ case BOSS_EVENT_ELITE_TROLLS:
+ EliteTrollsKilled = data;
+ if (EliteTrollsKilled == 6)
+ {
+ if (Creature* jammal = instance->GetCreature(JammalAnTheProphetGUID))
+ jammal->SetImmuneToPC(false);
+ SetBossState(BOSS_EVENT_ELITE_TROLLS, DONE);
+ }
+ SaveToDB();
+ break;
+ default:
+ break;
+ }
}
uint32 GetData(uint32 type) const override
{
- if (type == EVENT_STATE)
- return State;
+ switch (type)
+ {
+ case EVENT_STATE:
+ return State;
+ case BOSS_EVENT_ELITE_TROLLS:
+ return EliteTrollsKilled;
+ default:
+ break;
+ }
return 0;
}
- };
+ void ReadSaveDataMore(std::istringstream& data) override
+ {
+ data >> EliteTrollsKilled;
+ }
+
+ void WriteSaveDataMore(std::ostringstream& data) override
+ {
+ data << EliteTrollsKilled;
+ }
+ };
};
void AddSC_instance_sunken_temple()
diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h
index 1a4e57d2f2f..b7d1c96b7c5 100644
--- a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h
+++ b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h
@@ -23,9 +23,61 @@
#define STScriptName "instance_sunken_temple"
#define DataHeader "ST"
+enum STBossIds
+{
+ BOSS_AVATAR_OF_HAKKAR = 0,
+ BOSS_JAMMALAN_THE_PROPHET = 1,
+ BOSS_DREAMSCYTHE = 2,
+ BOSS_WEAVER = 3,
+ BOSS_MORPHAZ = 4,
+ BOSS_HAZZAS = 5,
+ BOSS_SHADE_OF_ERANIKUS = 6,
+ BOSS_ATALALARION = 7,
+ BOSS_EVENT_ELITE_TROLLS = 8,
+
+ MAX_ENCOUNTER
+};
+
+enum STCreatureIds
+{
+ NPC_AVATAR_OF_HAKKAR = 8443,
+ NPC_JAMMALAN_THE_PROPHET = 5710,
+ NPC_DREAMSCYTHE = 5721,
+ NPC_WEAVER = 5720,
+ NPC_MORPHAZ = 5719,
+ NPC_HAZZAS = 5722,
+ NPC_SHADE_OF_ERANIKUS = 5709,
+ NPC_ATALALARION = 8580,
+ NPC_ZOLO = 5712,
+ NPC_GASHER = 5713,
+ NPC_LORO = 5714,
+ NPC_HUKKU = 5715,
+ NPC_ZUL_LOR = 5716,
+ NPC_MIJAN = 5717,
+};
+
+enum STGameObjectIds
+{
+ GO_ATALAI_STATUE1 = 148830,
+ GO_ATALAI_STATUE2 = 148831,
+ GO_ATALAI_STATUE3 = 148832,
+ GO_ATALAI_STATUE4 = 148833,
+ GO_ATALAI_STATUE5 = 148834,
+ GO_ATALAI_STATUE6 = 148835,
+ GO_ATALAI_LIGHT1 = 148883,
+ GO_ATALAI_LIGHT2 = 148937,
+ GO_FORCEFIELD = 149431,
+};
+
enum STEvents
{
- EVENT_STATE = 1
+ EVENT_STATE = 1
+};
+
+enum STShareSpells
+{
+ SPELL_SUPPRESSION = 12623,
+ SPELL_GREEN_CHANNELING = 13540
};
template <class AI, class T>