Scripts/ZA: rewrite Zul'Aman intro script

*todo: Amani'shi Savages need to run upstairs
This commit is contained in:
Ovahlord
2019-03-16 14:00:14 +01:00
parent 1878beca7a
commit 957429caed
4 changed files with 405 additions and 110 deletions

View File

@@ -35,13 +35,16 @@ ObjectData const creatureData[] =
{ 0, 0 } // END
};
ObjectData const cameobjectData[] =
ObjectData const gameobjectData[] =
{
{ GO_STRANGE_GONG, DATA_STRANGE_GONG },
{ GO_MASSIVE_GATE, DATA_MASSIVE_GATE },
{ 0, 0 } // END
};
Position const AmanishiGuardianDistanceCheckPos = { 120.223f, 1585.766f, 43.43f };
Position const AmanishiSavageDistanceCheckPos = { 122.176f, 1528.203f, 21.233f };
class instance_zulaman : public InstanceMapScript
{
public:
@@ -53,7 +56,7 @@ public:
{
SetHeaders(DataHeader);
SetBossNumber(EncounterCount);
LoadObjectData(creatureData, cameobjectData);
LoadObjectData(creatureData, gameobjectData);
_remainingSpeedRunTime = 0;
_speedRunState = NOT_STARTED;
}
@@ -66,15 +69,27 @@ public:
void OnCreatureCreate(Creature* creature) override
{
/*
InstanceScript::OnCreatureCreate(creature);
switch (creature->GetEntry())
{
case NPC_AMANISHI_GUARDIAN:
if (creature->GetExactDist2d(AmanishiGuardianDistanceCheckPos) < 30.0f)
_amanishiGuardianGUIDs.push_back(creature->GetGUID());
break;
case NPC_AMANISHI_SAVAGE:
if (creature->GetExactDist2d(AmanishiSavageDistanceCheckPos) < 100.0f)
_amanishiSavageGUIDs.push_back(creature->GetGUID());
break;
default:
break;
}
*/
}
void OnGameObjectCreate(GameObject* go) override
{
InstanceScript::OnGameObjectCreate(go);
switch (go->GetEntry())
{
case GO_MASSIVE_GATE:
@@ -100,7 +115,6 @@ public:
switch (type)
{
case DATA_ZULAMAN_SPEEDRUN_STATE:
{
if (data == IN_PROGRESS)
{
_remainingSpeedRunTime = 15;
@@ -111,7 +125,14 @@ public:
SaveToDB();
}
break;
}
case DATA_TRIGGER_AMANISHI_GUARDIANS:
for (ObjectGuid guid : _amanishiGuardianGUIDs)
{
if (Creature* guardian = instance->GetCreature(guid))
if (guardian->IsAIEnabled)
guardian->AI()->DoAction(ACTION_ALERT_AMANISHI_GUARDIANS);
}
break;
default:
break;
}
@@ -146,12 +167,10 @@ public:
{
switch (eventId)
{
case EVENT_START_ZULAMAN:
case EVENT_RIUAL_OF_POWER:
if (Creature* voljin = GetCreature(DATA_VOLJIN))
{
if (voljin->IsAIEnabled)
voljin->AI()->DoAction(ACTION_START_ZULAMAN);
}
voljin->AI()->DoAction(ACTION_OPEN_MASSIVE_GATES);
break;
default:
break;
@@ -208,6 +227,8 @@ public:
protected:
EventMap events;
GuidVector _amanishiGuardianGUIDs;
GuidVector _amanishiSavageGUIDs;
uint32 _remainingSpeedRunTime;
uint32 _speedRunState;
};

View File

@@ -17,6 +17,7 @@
#include "ScriptMgr.h"
#include "CreatureTextMgr.h"
#include "ScriptedEscortAI.h"
#include "GameObject.h"
#include "InstanceScript.h"
#include "MotionMaster.h"
@@ -27,157 +28,237 @@
#include "SpellScript.h"
#include "zulaman.h"
enum Says
enum VoljinTexts
{
// Vol'jin
SAY_INTRO_1 = 0,
SAY_INTRO_2 = 1,
SAY_INTRO_3 = 2,
SAY_INTRO_4 = 3,
SAY_INTRO_FAIL = 4,
SAY_INTRO_1 = 0,
SAY_INTRO_2 = 1,
SAY_INTRO_3 = 2,
SAY_INTRO_4 = 3,
SAY_FAIL_GONG_EVENT = 4,
// Hex Lord Malacrass
SAY_HEXLOR_INTRO = 0
SAY_HEXLOR_INTRO = 0
};
enum Spells
enum VoljinSpells
{
// Vol'jin
SPELL_BANGING_THE_GONG = 45225
SPELL_BANGING_THE_GONG = 45225
};
enum Events
enum VoljinEvents
{
EVENT_INTRO_MOVEPOINT_1 = 1,
EVENT_INTRO_MOVEPOINT_2 = 2,
EVENT_INTRO_MOVEPOINT_3 = 3,
EVENT_BANGING_THE_GONG = 4,
EVENT_START_DOOR_OPENING_1 = 5,
EVENT_START_DOOR_OPENING_2 = 6,
EVENT_START_DOOR_OPENING_3 = 7,
EVENT_START_DOOR_OPENING_4 = 8,
EVENT_START_DOOR_OPENING_5 = 9,
EVENT_START_DOOR_OPENING_6 = 10,
EVENT_START_DOOR_OPENING_7 = 11
EVENT_DISMOUNT_VOLJIN = 1,
EVENT_REMOVE_GOSSIP_FLAG,
EVENT_SAY_FOLLOW_ME,
EVENT_MOVE_TO_GONG_1,
EVENT_MOVE_TO_GONG_2,
EVENT_FACE_TO_GONG,
EVENT_SAY_GONG_INSTRUCTIONS,
EVENT_BANGING_THE_GONG,
EVENT_MAKE_GONG_SELECTABLE,
EVENT_FAIL_GONG_EVENT,
EVENT_MOVE_TO_ROOM_CENTER,
EVENT_MOVE_HOME,
EVENT_FACE_HOME,
EVENT_RESET_NPC_FLAGS,
EVENT_MOVE_TO_CENTER,
EVENT_MAKE_GONG_UNSELECTABLE,
EVENT_TALK_TO_AMANI,
EVENT_OPEN_MASSIVE_GATE,
EVENT_TALK_WARN_PLAYERS,
EVENT_START_SPEED_RUN
};
enum Points
enum VoljinMovePoints
{
POINT_INTRO = 1,
POINT_STRANGE_GONG = 2,
POINT_START_DOOR_OPENING_1 = 3,
POINT_START_DOOR_OPENING_2 = 4
POINT_HOME = 1,
POINT_INTRO_1 = 2,
POINT_INTRO_2 = 3,
POINT_INTRO_3 = 4
};
enum Misc
enum VoljinMisc
{
ITEM_VIRTUAL_ITEM = 5301
ITEM_DISPLAY_ID_MACE = 5301,
MOUNT_DISPLAY_ID_RAPTOR = 29261
};
Position const VoljinIntroWaypoint[4] =
{
{ 117.7349f, 1662.77f, 42.02156f, 0.0f },
{ 132.14f, 1645.143f, 42.02158f, 0.0f },
{ 117.7349f, 1662.77f, 42.02156f, 0.0f },
{ 132.14f, 1645.143f, 42.02158f, 0.0f },
{ 121.8901f, 1639.118f, 42.23253f, 0.0f },
{ 122.618f, 1639.546f, 42.11659f, 0.0f },
{ 122.618f, 1639.546f, 42.11659f, 0.0f }
};
Position const VoljinIntroPosition1 = { 117.7349f, 1662.77f, 42.02156f };
Position const VoljinIntroPosition2 = { 132.14f, 1645.143f, 42.02158f };
Position const VoljinIntroPosition3 = { 122.6202f, 1639.547f, 42.16251f };
Position const VoljinHomePosition = { 121.0399f, 1672.196f, 42.02157f };
struct npc_zulaman_voljin : public ScriptedAI
{
npc_zulaman_voljin(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript())
npc_zulaman_voljin(Creature* creature) : ScriptedAI(creature), _instance(me->GetInstanceScript())
{
Initialize();
}
void Initialize()
{
_gongCount = 0;
_restarted = false;
_started = false;
_actionTriggered = false;
me->SetDisplayId(me->GetCreatureTemplate()->Modelid1);
if (_instance->GetData(DATA_ZULAMAN_SPEEDRUN_STATE) == NOT_STARTED)
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
if (_instance->GetData(DATA_ZULAMAN_SPEEDRUN_STATE) != NOT_STARTED)
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
}
bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
if (_instance->GetData(DATA_ZULAMAN_SPEEDRUN_STATE) != NOT_STARTED)
if (_started)
return true;
if (me->GetCreatureTemplate()->GossipMenuId == menuId && !gossipListId)
_playerGUID = player->GetGUID();
me->SetWalk(true);
if (!_restarted)
{
_events.Reset();
me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE);
_events.ScheduleEvent(EVENT_INTRO_MOVEPOINT_1, 1000);
Talk(SAY_INTRO_1, player);
me->SetWalk(true);
_events.ScheduleEvent(EVENT_DISMOUNT_VOLJIN, 1s);
_events.ScheduleEvent(EVENT_REMOVE_GOSSIP_FLAG, 3s);
_events.ScheduleEvent(EVENT_SAY_FOLLOW_ME, 4s);
}
else
{
_events.ScheduleEvent(EVENT_REMOVE_GOSSIP_FLAG, 1s + 400ms);
_events.ScheduleEvent(EVENT_SAY_FOLLOW_ME, 2s + 400ms);
}
player->PlayerTalkClass->SendCloseGossip();
_started = true;
return true;
}
void DoAction(int32 action) override
{
if (action == ACTION_START_ZULAMAN)
switch (action)
{
if (++_gongCount == 10)
_events.ScheduleEvent(EVENT_START_DOOR_OPENING_1, 500);
case ACTION_OPEN_MASSIVE_GATES:
if (!_actionTriggered)
{
_events.CancelEvent(EVENT_FAIL_GONG_EVENT);
_events.ScheduleEvent(EVENT_MOVE_TO_CENTER, 1s);
_actionTriggered = true;
}
break;
default:
break;
}
}
void UpdateAI(uint32 diff) override
{
_events.Update(diff);
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_INTRO_MOVEPOINT_1:
me->GetMotionMaster()->MovePoint(POINT_INTRO, VoljinIntroWaypoint[0]);
_events.ScheduleEvent(EVENT_INTRO_MOVEPOINT_2, 1000);
case EVENT_DISMOUNT_VOLJIN:
me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
break;
case EVENT_INTRO_MOVEPOINT_2:
me->GetMotionMaster()->MovePoint(POINT_STRANGE_GONG, VoljinIntroWaypoint[1]);
_events.ScheduleEvent(EVENT_INTRO_MOVEPOINT_3, 4000);
case EVENT_REMOVE_GOSSIP_FLAG:
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
break;
case EVENT_INTRO_MOVEPOINT_3:
case EVENT_SAY_FOLLOW_ME:
if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID))
Talk(SAY_INTRO_1, player);
_events.ScheduleEvent(EVENT_MOVE_TO_GONG_1, 1s);
break;
case EVENT_MOVE_TO_GONG_1:
me->GetMotionMaster()->MovePoint(POINT_INTRO_1, VoljinIntroPosition1);
break;
case EVENT_MOVE_TO_GONG_2:
me->GetMotionMaster()->MovePoint(POINT_INTRO_2, VoljinIntroPosition2);
break;
case EVENT_FACE_TO_GONG:
if (GameObject* gong = _instance->GetGameObject(DATA_STRANGE_GONG))
me->SetFacingToObject(gong);
_events.ScheduleEvent(EVENT_SAY_GONG_INSTRUCTIONS, 1s + 400ms);
break;
case EVENT_SAY_GONG_INSTRUCTIONS:
Talk(SAY_INTRO_2);
_events.ScheduleEvent(EVENT_BANGING_THE_GONG, 3000);
_events.ScheduleEvent(EVENT_BANGING_THE_GONG, 2s + 100ms);
break;
case EVENT_BANGING_THE_GONG:
DoCast(me, SPELL_BANGING_THE_GONG);
if (GameObject* strangeGong = _instance->GetGameObject(DATA_STRANGE_GONG))
strangeGong->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, uint32(ITEM_VIRTUAL_ITEM));
DoCastSelf(SPELL_BANGING_THE_GONG);
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, ITEM_DISPLAY_ID_MACE);
_events.ScheduleEvent(EVENT_MAKE_GONG_SELECTABLE, 400ms);
_events.ScheduleEvent(EVENT_FAIL_GONG_EVENT, 1min + 3s);
break;
case EVENT_START_DOOR_OPENING_1:
me->RemoveAura(SPELL_BANGING_THE_GONG);
_events.ScheduleEvent(EVENT_START_DOOR_OPENING_2, 500);
case EVENT_MAKE_GONG_SELECTABLE:
if (GameObject* gong = _instance->GetGameObject(DATA_STRANGE_GONG))
gong->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
break;
case EVENT_START_DOOR_OPENING_2:
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, uint32(0));
if (GameObject* strangeGong = _instance->GetGameObject(DATA_STRANGE_GONG))
strangeGong->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
_events.ScheduleEvent(EVENT_START_DOOR_OPENING_3, 500);
case EVENT_FAIL_GONG_EVENT:
if (GameObject* gong = _instance->GetGameObject(DATA_STRANGE_GONG))
gong->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
me->RemoveAurasDueToSpell(SPELL_BANGING_THE_GONG);
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, 0);
Talk(SAY_FAIL_GONG_EVENT);
_events.ScheduleEvent(EVENT_MOVE_HOME, 2s + 200ms);
break;
case EVENT_START_DOOR_OPENING_3:
me->GetMotionMaster()->MovePoint(POINT_START_DOOR_OPENING_1, VoljinIntroWaypoint[2]);
case EVENT_MOVE_HOME:
me->GetMotionMaster()->MovePoint(POINT_HOME, VoljinHomePosition);
break;
case EVENT_START_DOOR_OPENING_4:
_instance->SetData(DATA_ZULAMAN_SPEEDRUN_STATE, IN_PROGRESS);
if (GameObject* masiveGate = _instance->GetGameObject(DATA_MASSIVE_GATE))
masiveGate->SetGoState(GO_STATE_ACTIVE);
_events.ScheduleEvent(EVENT_START_DOOR_OPENING_5, 3000);
case EVENT_FACE_HOME:
me->SetFacingTo(4.782202f);
if (!_actionTriggered)
{
_started = false;
_restarted = true;
_events.ScheduleEvent(EVENT_RESET_NPC_FLAGS, 400ms);
}
else
me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, MOUNT_DISPLAY_ID_RAPTOR);
break;
case EVENT_START_DOOR_OPENING_5:
case EVENT_RESET_NPC_FLAGS:
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
break;
case EVENT_MOVE_TO_CENTER:
_instance->SetData(DATA_TRIGGER_AMANISHI_GUARDIANS, IN_PROGRESS);
me->RemoveAurasDueToSpell(SPELL_BANGING_THE_GONG);
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, 0);
me->GetMotionMaster()->MovePoint(POINT_INTRO_3, VoljinIntroPosition3);
_events.ScheduleEvent(EVENT_MAKE_GONG_UNSELECTABLE, 400ms);
break;
case EVENT_MAKE_GONG_UNSELECTABLE:
if (GameObject* gong = _instance->GetGameObject(DATA_STRANGE_GONG))
gong->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
break;
case EVENT_TALK_TO_AMANI:
me->SetFacingTo(4.747295f);
Talk(SAY_INTRO_3);
_events.ScheduleEvent(EVENT_OPEN_MASSIVE_GATE, 5s + 400ms);
_events.ScheduleEvent(EVENT_TALK_WARN_PLAYERS, 9s);
break;
case EVENT_OPEN_MASSIVE_GATE:
if (GameObject* gate = _instance->GetGameObject(DATA_MASSIVE_GATE))
gate->SetGoState(GO_STATE_ACTIVE);
break;
case EVENT_TALK_WARN_PLAYERS:
Talk(SAY_INTRO_4);
_events.ScheduleEvent(EVENT_START_DOOR_OPENING_6, 6000);
_events.ScheduleEvent(EVENT_MOVE_HOME, 4s + 500ms);
_events.ScheduleEvent(EVENT_START_SPEED_RUN, 12s);
break;
case EVENT_START_DOOR_OPENING_6:
_events.ScheduleEvent(EVENT_START_DOOR_OPENING_7, 6000);
break;
case EVENT_START_DOOR_OPENING_7:
if (Creature* hexLordTrigger = _instance->GetCreature(DATA_HEXLORD_MALACRASS_TRIGGER))
sCreatureTextMgr->SendChat(hexLordTrigger, SAY_HEXLOR_INTRO, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP);
case EVENT_START_SPEED_RUN:
_instance->SetData(DATA_ZULAMAN_SPEEDRUN_STATE, IN_PROGRESS);
break;
default:
break;
@@ -192,15 +273,17 @@ struct npc_zulaman_voljin : public ScriptedAI
switch (pointId)
{
case POINT_STRANGE_GONG:
if (GameObject* strangeGong = _instance->GetGameObject(DATA_STRANGE_GONG))
me->SetFacingToObject(strangeGong); // setInFront
case POINT_HOME:
_events.ScheduleEvent(EVENT_FACE_HOME, 1ms);
break;
case POINT_START_DOOR_OPENING_1:
me->SetFacingTo(4.747295f);
me->GetMotionMaster()->MovePoint(POINT_START_DOOR_OPENING_2, VoljinIntroWaypoint[3]);
Talk(SAY_INTRO_3);
_events.ScheduleEvent(EVENT_START_DOOR_OPENING_4, 4500);
case POINT_INTRO_1:
_events.ScheduleEvent(EVENT_MOVE_TO_GONG_2, 1ms);
break;
case POINT_INTRO_2:
_events.ScheduleEvent(EVENT_FACE_TO_GONG, 800ms);
break;
case POINT_INTRO_3:
_events.ScheduleEvent(EVENT_TALK_TO_AMANI, 1ms);
break;
default:
break;
@@ -210,7 +293,177 @@ struct npc_zulaman_voljin : public ScriptedAI
private:
InstanceScript* _instance;
EventMap _events;
uint8 _gongCount;
ObjectGuid _playerGUID;
bool _restarted;
bool _started;
bool _actionTriggered;
};
Position const AmanishiGuardianPos1 = { 107.7912f, 1586.498f, 43.58794f };
Position const AmanishiGuardianPos2 = { 131.8407f, 1590.247f, 43.61382f };
enum AmanishiGuardianTexts
{
SAY_ALERT = 0,
SAY_ENRAGE = 1
};
enum AmanishiGuardianEvents
{
EVENT_MOVE_TO_GATE = 1,
EVENT_FACE_TO_ENTRANCE,
EVENT_SAY_ALERT,
EVENT_MAKE_ATTACKABLE,
EVENT_REND
};
enum AmanishiGuardianMovePoints
{
POINT_MASSIVE_GATE = 1
};
enum AmanishiGuardianSpells
{
SPELL_REND = 43246,
SPELL_ENRAGE = 8599
};
enum AmanishiGuardianMisc
{
ITEM_DISPLAY_ID_SPEAR = 13631
};
struct npc_zulaman_amanishi_guardian : public ScriptedAI
{
npc_zulaman_amanishi_guardian(Creature* creature) : ScriptedAI(creature)
{
Initialize();
}
void Initialize()
{
_enraged = false;
_firstGuardian = me->GetHomePosition().GetExactDist2d(AmanishiGuardianPos1) < 10.0f;
}
void JustEngagedWith(Unit* /*who*/) override
{
_events.ScheduleEvent(EVENT_REND, 5s, 7s);
}
void EnterEvadeMode(EvadeReason why) override
{
me->GetMotionMaster()->MoveTargetedHome();
_EnterEvadeMode();
_events.Reset();
Initialize();
}
void DoAction(int32 action) override
{
switch (action)
{
case ACTION_ALERT_AMANISHI_GUARDIANS:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
if (_firstGuardian)
_events.ScheduleEvent(EVENT_MOVE_TO_GATE, 19s + 200ms);
else
{
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, ITEM_DISPLAY_ID_SPEAR);
_events.ScheduleEvent(EVENT_MOVE_TO_GATE, 16s + 500ms);
}
break;
default:
break;
}
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && me->IsInCombat())
return;
_events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_MOVE_TO_GATE:
if (_firstGuardian)
me->GetMotionMaster()->MovePoint(POINT_MASSIVE_GATE, AmanishiGuardianPos1);
else
me->GetMotionMaster()->MovePoint(POINT_MASSIVE_GATE, AmanishiGuardianPos2);
break;
case EVENT_MAKE_ATTACKABLE:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
break;
case EVENT_FACE_TO_ENTRANCE:
if (_firstGuardian)
me->SetFacingTo(1.047198f);
else
{
me->SetFacingTo(2.024582f);
_events.ScheduleEvent(EVENT_SAY_ALERT, 1s + 400ms);
}
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H);
break;
case EVENT_SAY_ALERT:
Talk(SAY_ALERT);
break;
case EVENT_REND:
DoCastVictim(SPELL_REND);
_events.Repeat(5s);
break;
default:
break;
}
}
DoMeleeAttackIfReady();
}
void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (me->HealthBelowPct(50) && !_enraged)
{
DoCastSelf(SPELL_ENRAGE);
Talk(SAY_ENRAGE);
_enraged = true;
}
}
void MovementInform(uint32 movementType, uint32 pointId) override
{
if (movementType != POINT_MOTION_TYPE)
return;
switch (pointId)
{
case POINT_MASSIVE_GATE:
if (_firstGuardian)
{
_events.ScheduleEvent(EVENT_FACE_TO_ENTRANCE, 1ms);
_events.ScheduleEvent(EVENT_MAKE_ATTACKABLE, 1ms);
}
else
{
_events.ScheduleEvent(EVENT_FACE_TO_ENTRANCE, 1ms);
_events.ScheduleEvent(EVENT_MAKE_ATTACKABLE, 4s + 800ms);
}
break;
default:
break;
}
}
private:
EventMap _events;
bool _enraged;
bool _firstGuardian;
};
// 45226 - Banging the Gong
@@ -218,9 +471,9 @@ class spell_banging_the_gong : public SpellScript
{
PrepareSpellScript(spell_banging_the_gong);
void Activate(SpellEffIndex index)
void Activate(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(index);
PreventHitDefaultEffect(effIndex);
GetHitGObj()->SendCustomAnim(0);
}
@@ -233,5 +486,6 @@ class spell_banging_the_gong : public SpellScript
void AddSC_zulaman()
{
RegisterZulAamanCreatureAI(npc_zulaman_voljin);
RegisterZulAamanCreatureAI(npc_zulaman_amanishi_guardian);
RegisterSpellScript(spell_banging_the_gong);
}

View File

@@ -40,6 +40,8 @@ enum ZADataTypes
DATA_STRANGE_GONG,
DATA_MASSIVE_GATE,
DATA_ZULAMAN_SPEEDRUN_STATE,
DATA_TRIGGER_AMANISHI_GUARDIANS,
DATA_TRIGGER_AMANISHI_SAVAGES,
};
enum ZACreatureIds
@@ -53,24 +55,27 @@ enum ZACreatureIds
BOSS_DAAKARA = 23863,
NPC_VOLJIN = 52924,
NPC_HEXLORD_MALACRASS_TRIGGER = 24363
NPC_HEXLORD_MALACRASS_TRIGGER = 24363,
NPC_AMANISHI_GUARDIAN = 23597,
NPC_AMANISHI_SAVAGE = 23889
};
enum ZAGameObjectIds
{
GO_STRANGE_GONG = 187359,
GO_MASSIVE_GATE = 186728,
GO_STRANGE_GONG = 187359,
GO_MASSIVE_GATE = 186728,
};
enum ZAEvents
{
EVENT_START_ZULAMAN = 15897,
EVENT_RIUAL_OF_POWER = 15897,
EVENT_UPDATE_SPEED_RUN_TIMER = 1,
};
enum ZAAction
enum ZAActions
{
ACTION_START_ZULAMAN = 1
ACTION_OPEN_MASSIVE_GATES = 1,
ACTION_ALERT_AMANISHI_GUARDIANS = 1
};
enum ZAWorldStates