mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-20 09:17:36 +01:00
Core/Scripts: Boss Jedoga Shadowseeker rewrite (#20279)
* Core/Scripts: Boss Jedoga Shadowseeker rewrite Added all missing spells and visuals Added Twilight volunteers in the fight Fixed Jedoga Controller's behavior, mostly moved to boss_prince_taldaram, where they belong Updated script register model Misc updates and improvements Updated instance model
This commit is contained in:
@@ -37,13 +37,7 @@ enum AKDataTypes
|
||||
// Additional Data
|
||||
DATA_SPHERE_1 = 5,
|
||||
DATA_SPHERE_2 = 6,
|
||||
DATA_PRINCE_TALDARAM_PLATFORM = 7,
|
||||
DATA_PL_JEDOGA_TARGET = 8,
|
||||
DATA_ADD_JEDOGA_OPFER = 9,
|
||||
DATA_ADD_JEDOGA_INITIAND = 10,
|
||||
DATA_JEDOGA_TRIGGER_SWITCH = 11,
|
||||
DATA_JEDOGA_RESET_INITIANDS = 12,
|
||||
DATA_ALL_INITIAND_DEAD = 13
|
||||
DATA_PRINCE_TALDARAM_PLATFORM = 7
|
||||
};
|
||||
|
||||
enum AKCreatureIds
|
||||
@@ -59,7 +53,9 @@ enum AKCreatureIds
|
||||
NPC_AHNKAHAR_SWARMER = 30178,
|
||||
|
||||
// Jedoga Shadowseeker
|
||||
NPC_INITIAND = 30114,
|
||||
NPC_TWILIGHT_INITIATE = 30114,
|
||||
NPC_TWILIGHT_VOLUNTEER = 30385,
|
||||
NPC_TWILIGHT_WORSHIPPER = 30111,
|
||||
NPC_JEDOGA_CONTROLLER = 30181,
|
||||
|
||||
// Amanitar
|
||||
@@ -88,4 +84,6 @@ inline AI* GetAhnKahetAI(T* obj)
|
||||
return GetInstanceAI<AI>(obj, AhnKahetScriptName);
|
||||
}
|
||||
|
||||
#define RegisterAhnKahetCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetAhnKahetAI)
|
||||
|
||||
#endif // AHNKAHET_H_
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -53,7 +53,8 @@ enum Spells
|
||||
enum Misc
|
||||
{
|
||||
DATA_EMBRACE_DMG = 20000,
|
||||
H_DATA_EMBRACE_DMG = 40000
|
||||
H_DATA_EMBRACE_DMG = 40000,
|
||||
SUMMON_GROUP_CONTROLLERS = 1
|
||||
};
|
||||
|
||||
#define DATA_SPHERE_DISTANCE 25.0f
|
||||
@@ -104,6 +105,9 @@ class boss_prince_taldaram : public CreatureScript
|
||||
_flameSphereTargetGUID.Clear();
|
||||
_embraceTargetGUID.Clear();
|
||||
_embraceTakenDamage = 0;
|
||||
|
||||
if (!CheckSpheres())
|
||||
me->SummonCreatureGroup(SUMMON_GROUP_CONTROLLERS);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
@@ -125,6 +129,10 @@ class boss_prince_taldaram : public CreatureScript
|
||||
case NPC_FLAME_SPHERE_2:
|
||||
case NPC_FLAME_SPHERE_3:
|
||||
summon->AI()->SetGUID(_flameSphereTargetGUID);
|
||||
break;
|
||||
case NPC_JEDOGA_CONTROLLER:
|
||||
summon->CastSpell(me, SPELL_BEAM_VISUAL);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
@@ -266,13 +274,15 @@ class boss_prince_taldaram : public CreatureScript
|
||||
void RemovePrison()
|
||||
{
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
summons.DespawnEntry(NPC_JEDOGA_CONTROLLER);
|
||||
me->RemoveAurasDueToSpell(SPELL_BEAM_VISUAL);
|
||||
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), DATA_GROUND_POSITION_Z, me->GetOrientation());
|
||||
DoCast(SPELL_HOVER_FALL);
|
||||
me->SetDisableGravity(false);
|
||||
me->GetMotionMaster()->MoveLand(0, me->GetHomePosition());
|
||||
Talk(SAY_WARNING);
|
||||
instance->HandleGameObject(instance->GetGuidData(DATA_PRINCE_TALDARAM_PLATFORM), true);
|
||||
if (GameObject* platform = instance->GetGameObject(DATA_PRINCE_TALDARAM_PLATFORM))
|
||||
instance->HandleGameObject(platform->GetGUID(), true);
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -395,7 +405,7 @@ class go_prince_taldaram_sphere : public GameObjectScript
|
||||
|
||||
bool GossipHello(Player* /*player*/) override
|
||||
{
|
||||
Creature* princeTaldaram = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PRINCE_TALDARAM));
|
||||
Creature* princeTaldaram = instance->GetCreature(DATA_PRINCE_TALDARAM);
|
||||
if (princeTaldaram && princeTaldaram->IsAlive())
|
||||
{
|
||||
me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "AreaBoundary.h"
|
||||
#include "ahnkahet.h"
|
||||
#include "Creature.h"
|
||||
#include "CreatureAI.h"
|
||||
#include "GameObject.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "Map.h"
|
||||
@@ -29,6 +29,27 @@ DoorData const doorData[] =
|
||||
{ 0, 0, DOOR_TYPE_ROOM } // END
|
||||
};
|
||||
|
||||
ObjectData const creatureData[] =
|
||||
{
|
||||
{ NPC_ELDER_NADOX, DATA_ELDER_NADOX },
|
||||
{ NPC_PRINCE_TALDARAM, DATA_PRINCE_TALDARAM },
|
||||
{ NPC_JEDOGA_SHADOWSEEKER, DATA_JEDOGA_SHADOWSEEKER },
|
||||
{ NPC_AMANITAR, DATA_AMANITAR },
|
||||
{ NPC_HERALD_VOLAZJ, DATA_HERALD_VOLAZJ },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
ObjectData const gameObjectData[] =
|
||||
{
|
||||
{ GO_PRINCE_TALDARAM_PLATFORM, DATA_PRINCE_TALDARAM_PLATFORM },
|
||||
{ 0, 0 } //END
|
||||
};
|
||||
|
||||
BossBoundaryData const boundaries =
|
||||
{
|
||||
{ DATA_JEDOGA_SHADOWSEEKER, new ParallelogramBoundary(Position(460.365f, -661.997f, -20.985f), Position(364.958f,-790.211f, -14.207f), Position(347.436f,-657.978f,14.478f)) }
|
||||
};
|
||||
|
||||
class instance_ahnkahet : public InstanceMapScript
|
||||
{
|
||||
public:
|
||||
@@ -41,46 +62,20 @@ class instance_ahnkahet : public InstanceMapScript
|
||||
SetHeaders(DataHeader);
|
||||
SetBossNumber(EncounterCount);
|
||||
LoadDoorData(doorData);
|
||||
|
||||
SwitchTrigger = 0;
|
||||
LoadObjectData(creatureData, gameObjectData);
|
||||
LoadBossBoundaries(boundaries);
|
||||
|
||||
SpheresState[0] = 0;
|
||||
SpheresState[1] = 0;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature) override
|
||||
{
|
||||
switch (creature->GetEntry())
|
||||
{
|
||||
case NPC_ELDER_NADOX:
|
||||
ElderNadoxGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_PRINCE_TALDARAM:
|
||||
PrinceTaldaramGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_JEDOGA_SHADOWSEEKER:
|
||||
JedogaShadowseekerGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_AMANITAR:
|
||||
AmanitarGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_HERALD_VOLAZJ:
|
||||
HeraldVolazjGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_INITIAND:
|
||||
InitiandGUIDs.insert(creature->GetGUID());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* go) override
|
||||
{
|
||||
InstanceScript::OnGameObjectCreate(go);
|
||||
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
case GO_PRINCE_TALDARAM_PLATFORM:
|
||||
PrinceTaldaramPlatformGUID = go->GetGUID();
|
||||
if (GetBossState(DATA_PRINCE_TALDARAM) == DONE)
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
break;
|
||||
@@ -102,21 +97,6 @@ class instance_ahnkahet : public InstanceMapScript
|
||||
else
|
||||
go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
break;
|
||||
case GO_PRINCE_TALDARAM_GATE:
|
||||
AddDoor(go, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameObjectRemove(GameObject* go) override
|
||||
{
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
case GO_PRINCE_TALDARAM_GATE:
|
||||
AddDoor(go, false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -130,20 +110,6 @@ class instance_ahnkahet : public InstanceMapScript
|
||||
case DATA_SPHERE_2:
|
||||
SpheresState[type - DATA_SPHERE_1] = data;
|
||||
break;
|
||||
case DATA_JEDOGA_TRIGGER_SWITCH:
|
||||
SwitchTrigger = data;
|
||||
break;
|
||||
case DATA_JEDOGA_RESET_INITIANDS:
|
||||
for (ObjectGuid guid : InitiandGUIDs)
|
||||
{
|
||||
if (Creature* creature = instance->GetCreature(guid))
|
||||
{
|
||||
creature->Respawn();
|
||||
if (!creature->IsInEvadeMode())
|
||||
creature->AI()->EnterEvadeMode();
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -156,99 +122,12 @@ class instance_ahnkahet : public InstanceMapScript
|
||||
case DATA_SPHERE_1:
|
||||
case DATA_SPHERE_2:
|
||||
return SpheresState[type - DATA_SPHERE_1];
|
||||
case DATA_ALL_INITIAND_DEAD:
|
||||
for (ObjectGuid guid : InitiandGUIDs)
|
||||
{
|
||||
Creature* cr = instance->GetCreature(guid);
|
||||
if (!cr || cr->IsAlive())
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
case DATA_JEDOGA_TRIGGER_SWITCH:
|
||||
return SwitchTrigger;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SetGuidData(uint32 type, ObjectGuid data) override
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_ADD_JEDOGA_OPFER:
|
||||
JedogaSacrifices = data;
|
||||
break;
|
||||
case DATA_PL_JEDOGA_TARGET:
|
||||
JedogaTarget = data;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ObjectGuid GetGuidData(uint32 type) const override
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_ELDER_NADOX:
|
||||
return ElderNadoxGUID;
|
||||
case DATA_PRINCE_TALDARAM:
|
||||
return PrinceTaldaramGUID;
|
||||
case DATA_JEDOGA_SHADOWSEEKER:
|
||||
return JedogaShadowseekerGUID;
|
||||
case DATA_AMANITAR:
|
||||
return AmanitarGUID;
|
||||
case DATA_HERALD_VOLAZJ:
|
||||
return HeraldVolazjGUID;
|
||||
case DATA_PRINCE_TALDARAM_PLATFORM:
|
||||
return PrinceTaldaramPlatformGUID;
|
||||
case DATA_ADD_JEDOGA_INITIAND:
|
||||
{
|
||||
GuidVector vInitiands;
|
||||
vInitiands.reserve(InitiandGUIDs.size());
|
||||
for (ObjectGuid guid : InitiandGUIDs)
|
||||
{
|
||||
Creature* cr = instance->GetCreature(guid);
|
||||
if (cr && cr->IsAlive())
|
||||
vInitiands.push_back(guid);
|
||||
}
|
||||
if (vInitiands.empty())
|
||||
return ObjectGuid::Empty;
|
||||
|
||||
return Trinity::Containers::SelectRandomContainerElement(vInitiands);
|
||||
}
|
||||
case DATA_ADD_JEDOGA_OPFER:
|
||||
return JedogaSacrifices;
|
||||
case DATA_PL_JEDOGA_TARGET:
|
||||
return JedogaTarget;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ObjectGuid::Empty;
|
||||
}
|
||||
|
||||
bool SetBossState(uint32 type, EncounterState state) override
|
||||
{
|
||||
if (!InstanceScript::SetBossState(type, state))
|
||||
return false;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case DATA_JEDOGA_SHADOWSEEKER:
|
||||
if (state == DONE)
|
||||
{
|
||||
for (ObjectGuid guid : InitiandGUIDs)
|
||||
if (Creature* cr = instance->GetCreature(guid))
|
||||
cr->DespawnOrUnsummon();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void WriteSaveDataMore(std::ostringstream& data) override
|
||||
{
|
||||
data << SpheresState[0] << ' ' << SpheresState[1];
|
||||
@@ -261,20 +140,7 @@ class instance_ahnkahet : public InstanceMapScript
|
||||
}
|
||||
|
||||
protected:
|
||||
ObjectGuid ElderNadoxGUID;
|
||||
ObjectGuid PrinceTaldaramGUID;
|
||||
ObjectGuid JedogaShadowseekerGUID;
|
||||
ObjectGuid AmanitarGUID;
|
||||
ObjectGuid HeraldVolazjGUID;
|
||||
|
||||
ObjectGuid PrinceTaldaramPlatformGUID;
|
||||
ObjectGuid JedogaSacrifices;
|
||||
ObjectGuid JedogaTarget;
|
||||
|
||||
GuidSet InitiandGUIDs;
|
||||
|
||||
uint32 SpheresState[2];
|
||||
uint8 SwitchTrigger;
|
||||
};
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* map) const override
|
||||
|
||||
Reference in New Issue
Block a user