mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 10:05:32 +01:00
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>
This commit is contained in:
5
sql/updates/world/3.3.5/2024_02_23_00_world.sql
Normal file
5
sql/updates/world/3.3.5/2024_02_23_00_world.sql
Normal file
@@ -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);
|
||||
@@ -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()
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user