diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
index 4dcb41f533b..9c784da9357 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
@@ -135,7 +135,6 @@ class boss_akilzon : public CreatureScript
void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
- Talk(SAY_PLAYER_KILL);
Talk(SAY_KILL);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_daakara.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_daakara.cpp
index d1d62b373e5..4a44be3d676 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_daakara.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_daakara.cpp
@@ -52,7 +52,7 @@ class boss_daakara : public CreatureScript
struct boss_daakaraAI : public BossAI
{
- boss_daakaraAI(Creature* creature) : BossAI(creature, DATA_DAAKARA) { }
+ boss_daakaraAI(Creature* creature) : BossAI(creature, DATA_DAAKARAEVENT) { }
void Reset() override
{
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp
index 2b33461dc4e..53554a64458 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp
@@ -22,285 +22,285 @@
class instance_zulaman : public InstanceMapScript
{
- public:
- instance_zulaman() : InstanceMapScript(ZulAmanScriptName, 568) { }
+public:
+ instance_zulaman() : InstanceMapScript(ZulAmanScriptName, 568) { }
- struct instance_zulaman_InstanceScript : public InstanceScript
+ struct instance_zulaman_InstanceScript : public InstanceScript
+ {
+ instance_zulaman_InstanceScript(InstanceMap* map) : InstanceScript(map)
{
- instance_zulaman_InstanceScript(InstanceMap* map) : InstanceScript(map)
- {
- SetHeaders(DataHeader);
- SetBossNumber(EncounterCount);
+ SetHeaders(DataHeader);
+ SetBossNumber(EncounterCount);
- SpeedRunTimer = 16;
- ZulAmanState = NOT_STARTED;
- ZulAmanBossCount = 0;
+ SpeedRunTimer = 16;
+ ZulAmanState = NOT_STARTED;
+ ZulAmanBossCount = 0;
+ }
+
+ void FillInitialWorldStates(WorldPacket& packet) override
+ {
+ packet << uint32(WORLD_STATE_ZULAMAN_TIMER_ENABLED) << uint32(ZulAmanState ? 1 : 0);
+ packet << uint32(WORLD_STATE_ZULAMAN_TIMER) << uint32(SpeedRunTimer);
+ }
+
+ void OnCreatureCreate(Creature* creature) override
+ {
+ switch (creature->GetEntry())
+ {
+ case NPC_AKILZON:
+ AkilzonGUID = creature->GetGUID();
+ break;
+ case NPC_NALORAKK:
+ NalorakkGUID = creature->GetGUID();
+ break;
+ case NPC_JANALAI:
+ JanalaiGUID = creature->GetGUID();
+ break;
+ case NPC_HALAZZI:
+ HalazziGUID = creature->GetGUID();
+ break;
+ case NPC_HEXLORD:
+ HexLordMalacrassGUID = creature->GetGUID();
+ break;
+ case NPC_DAAKARA:
+ DaakaraGUID = creature->GetGUID();
+ break;
+ case NPC_VOLJIN:
+ VoljinGUID = creature->GetGUID();
+ break;
+ case NPC_HEXLORD_TRIGGER:
+ HexLordTriggerGUID = creature->GetGUID();
+ break;
+ default:
+ break;
+ }
+ }
+
+ void OnGameObjectCreate(GameObject* go) override
+ {
+ switch (go->GetEntry())
+ {
+ case GO_STRANGE_GONG:
+ StrangeGongGUID = go->GetGUID();
+ break;
+ case GO_MASSIVE_GATE:
+ MasiveGateGUID = go->GetGUID();
+ AddDoor(go, true);
+ if (ZulAmanState != NOT_STARTED)
+ go->SetGoState(GO_STATE_ACTIVE);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void OnGameObjectRemove(GameObject* go) override
+ {
+ switch (go->GetEntry())
+ {
+ case GO_MASSIVE_GATE:
+ AddDoor(go, false);
+ break;
+ default:
+ break;
+ }
+ }
+
+ ObjectGuid GetGuidData(uint32 type) const override
+ {
+ switch (type)
+ {
+ case DATA_AKILZONEVENT:
+ return AkilzonGUID;
+ case DATA_NALORAKKEVENT:
+ return NalorakkGUID;
+ case DATA_JANALAIEVENT:
+ return JanalaiGUID;
+ case DATA_HALAZZIEVENT:
+ return HalazziGUID;
+ case DATA_HEXLORDEVENT:
+ return HexLordMalacrassGUID;
+ case DATA_DAAKARAEVENT:
+ return DaakaraGUID;
+ case DATA_HEXLORD_TRIGGER:
+ return HexLordTriggerGUID;
+ case DATA_STRANGE_GONG:
+ return StrangeGongGUID;
+ case DATA_MASSIVE_GATE:
+ return MasiveGateGUID;
+ default:
+ break;
}
- void FillInitialWorldStates(WorldPacket& packet) override
- {
- packet << uint32(WORLD_STATE_ZULAMAN_TIMER_ENABLED) << uint32(ZulAmanState ? 1 : 0);
- packet << uint32(WORLD_STATE_ZULAMAN_TIMER) << uint32(SpeedRunTimer);
- }
+ return ObjectGuid::Empty;
+ }
- void OnCreatureCreate(Creature* creature) override
+ void SetData(uint32 type, uint32 data) override
+ {
+ switch (type)
{
- switch (creature->GetEntry())
+ case DATA_ZULAMAN_STATE:
+ {
+ if (data == IN_PROGRESS)
{
- case NPC_AKILZON:
- AkilzonGUID = creature->GetGUID();
- break;
- case NPC_NALORAKK:
- NalorakkGUID = creature->GetGUID();
- break;
- case NPC_JANALAI:
- JanalaiGUID = creature->GetGUID();
- break;
- case NPC_HALAZZI:
- HalazziGUID = creature->GetGUID();
- break;
- case NPC_HEXLORD:
- HexLordMalacrassGUID = creature->GetGUID();
- break;
- case NPC_DAAKARA:
- DaakaraGUID = creature->GetGUID();
- break;
- case NPC_VOLJIN:
- VoljinGUID = creature->GetGUID();
- break;
- case NPC_HEXLORD_TRIGGER:
- HexLordTriggerGUID = creature->GetGUID();
- break;
- default:
- break;
+ DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER_ENABLED, 1);
+ DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER, 15);
+ events.ScheduleEvent(EVENT_UPDATE_ZULAMAN_TIMER, 60000);
+ SpeedRunTimer = 15;
+ ZulAmanState = data;
+ SaveToDB();
}
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ uint32 GetData(uint32 type) const override
+ {
+ switch (type)
+ {
+ case DATA_ZULAMAN_STATE:
+ return ZulAmanState;
+ default:
+ break;
}
- void OnGameObjectCreate(GameObject* go) override
- {
- switch (go->GetEntry())
- {
- case GO_STRANGE_GONG:
- StrangeGongGUID = go->GetGUID();
- break;
- case GO_MASSIVE_GATE:
- MasiveGateGUID = go->GetGUID();
- AddDoor(go, true);
- if (ZulAmanState != NOT_STARTED)
- go->SetGoState(GO_STATE_ACTIVE);
- break;
- default:
- break;
- }
- }
+ return 0;
+ }
- void OnGameObjectRemove(GameObject* go) override
- {
- switch (go->GetEntry())
- {
- case GO_MASSIVE_GATE:
- AddDoor(go, false);
- break;
- default:
- break;
- }
- }
+ bool SetBossState(uint32 type, EncounterState state) override
+ {
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
- ObjectGuid GetGuidData(uint32 type) const override
+ if (state == DONE)
{
- switch (type)
+ if (ZulAmanState == IN_PROGRESS && SpeedRunTimer)
{
- case DATA_AKILZON:
- return AkilzonGUID;
- case DATA_NALORAKK:
- return NalorakkGUID;
- case DATA_JANALAI:
- return JanalaiGUID;
- case DATA_HALAZZI:
- return HalazziGUID;
- case DATA_HEXLORD:
- return HexLordMalacrassGUID;
- case DATA_DAAKARA:
- return DaakaraGUID;
- case DATA_HEXLORD_TRIGGER:
- return HexLordTriggerGUID;
- case DATA_STRANGE_GONG:
- return StrangeGongGUID;
- case DATA_MASSIVE_GATE:
- return MasiveGateGUID;
- default:
- break;
- }
+ ++ZulAmanBossCount;
- return ObjectGuid::Empty;
- }
-
- void SetData(uint32 type, uint32 data) override
- {
- switch (type)
- {
- case DATA_ZULAMAN_STATE:
+ if (ZulAmanBossCount < 2)
{
- if (data == IN_PROGRESS)
- {
- DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER_ENABLED, 1);
- DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER, 15);
- events.ScheduleEvent(EVENT_UPDATE_ZULAMAN_TIMER, 60000);
- SpeedRunTimer = 15;
- ZulAmanState = data;
- SaveToDB();
- }
- break;
+ SpeedRunTimer = SpeedRunTimer + 5;
+ DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER, SpeedRunTimer);
}
- default:
- break;
- }
- }
-
- uint32 GetData(uint32 type) const override
- {
- switch (type)
- {
- case DATA_ZULAMAN_STATE:
- return ZulAmanState;
- default:
- break;
- }
-
- return 0;
- }
-
- bool SetBossState(uint32 type, EncounterState state) override
- {
- if (!InstanceScript::SetBossState(type, state))
- return false;
-
- if (state == DONE)
- {
- if (ZulAmanState == IN_PROGRESS && SpeedRunTimer)
+ else if (ZulAmanBossCount == 4)
{
- ++ZulAmanBossCount;
-
- if (ZulAmanBossCount < 2)
- {
- SpeedRunTimer = SpeedRunTimer + 5;
- DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER, SpeedRunTimer);
- }
- else if (ZulAmanBossCount == 4)
- {
- DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER_ENABLED, 0);
- events.CancelEvent(EVENT_UPDATE_ZULAMAN_TIMER);
- ZulAmanState = DONE;
- }
+ DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER_ENABLED, 0);
+ events.CancelEvent(EVENT_UPDATE_ZULAMAN_TIMER);
+ ZulAmanState = DONE;
}
}
-
- switch (type)
- {
- case DATA_AKILZON:
- break;
- case DATA_NALORAKK:
- break;
- case DATA_JANALAI:
- break;
- case DATA_HALAZZI:
- case DATA_HEXLORD:
- case DATA_DAAKARA:
- break;
- default:
- break;
- }
-
- return true;
}
- void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override
+ switch (type)
+ {
+ case DATA_AKILZONEVENT:
+ break;
+ case DATA_NALORAKKEVENT:
+ break;
+ case DATA_JANALAIEVENT:
+ break;
+ case DATA_HALAZZIEVENT:
+ case DATA_HEXLORDEVENT:
+ case DATA_DAAKARAEVENT:
+ break;
+ default:
+ break;
+ }
+
+ return true;
+ }
+
+ void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override
+ {
+ switch (eventId)
+ {
+ case EVENT_START_ZULAMAN:
+ if (Creature* voljin = instance->GetCreature(VoljinGUID))
+ {
+ if (voljin->IsAIEnabled)
+ voljin->AI()->DoAction(ACTION_START_ZULAMAN);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ void Update(uint32 diff)
+ {
+ if (events.Empty())
+ return;
+
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
- case EVENT_START_ZULAMAN:
- if (Creature* voljin = instance->GetCreature(VoljinGUID))
- {
- if (voljin->IsAIEnabled)
- voljin->AI()->DoAction(ACTION_START_ZULAMAN);
- }
- break;
- default:
- break;
- }
- }
-
- void Update(uint32 diff)
- {
- if (events.Empty())
- return;
-
- events.Update(diff);
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
+ case EVENT_UPDATE_ZULAMAN_TIMER:
+ SaveToDB();
+ DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER, --SpeedRunTimer);
+ if (SpeedRunTimer)
+ events.ScheduleEvent(EVENT_UPDATE_ZULAMAN_TIMER, 60000);
+ else
{
- case EVENT_UPDATE_ZULAMAN_TIMER:
- SaveToDB();
- DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER, --SpeedRunTimer);
- if (SpeedRunTimer)
- events.ScheduleEvent(EVENT_UPDATE_ZULAMAN_TIMER, 60000);
- else
- {
- DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER_ENABLED, 0);
- events.CancelEvent(EVENT_UPDATE_ZULAMAN_TIMER);
- ZulAmanState = FAIL;
- }
- break;
- default:
- break;
+ DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER_ENABLED, 0);
+ events.CancelEvent(EVENT_UPDATE_ZULAMAN_TIMER);
+ ZulAmanState = FAIL;
}
+ break;
+ default:
+ break;
}
}
-
- void WriteSaveDataMore(std::ostringstream& data) override
- {
- data << ZulAmanState << ' '
- << SpeedRunTimer << ' '
- << ZulAmanBossCount;
- }
-
- void ReadSaveDataMore(std::istringstream& data) override
- {
- data >> ZulAmanState;
- data >> SpeedRunTimer;
- data >> ZulAmanBossCount;
-
- if (ZulAmanState == IN_PROGRESS && SpeedRunTimer && SpeedRunTimer <= 15)
- {
- events.ScheduleEvent(EVENT_UPDATE_ZULAMAN_TIMER, 60000);
- DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER_ENABLED, 1);
- DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER, SpeedRunTimer);
- }
- }
-
- protected:
- EventMap events;
- ObjectGuid AkilzonGUID;
- ObjectGuid NalorakkGUID;
- ObjectGuid JanalaiGUID;
- ObjectGuid HalazziGUID;
- ObjectGuid HexLordMalacrassGUID;
- ObjectGuid DaakaraGUID;
- ObjectGuid VoljinGUID;
- ObjectGuid HexLordTriggerGUID;
- ObjectGuid StrangeGongGUID;
- ObjectGuid MasiveGateGUID;
- uint32 SpeedRunTimer;
- uint32 ZulAmanState;
- uint32 ZulAmanBossCount;
- };
-
- InstanceScript* GetInstanceScript(InstanceMap* map) const override
- {
- return new instance_zulaman_InstanceScript(map);
}
+
+ void WriteSaveDataMore(std::ostringstream& data) override
+ {
+ data << ZulAmanState << ' '
+ << SpeedRunTimer << ' '
+ << ZulAmanBossCount;
+ }
+
+ void ReadSaveDataMore(std::istringstream& data) override
+ {
+ data >> ZulAmanState;
+ data >> SpeedRunTimer;
+ data >> ZulAmanBossCount;
+
+ if (ZulAmanState == IN_PROGRESS && SpeedRunTimer && SpeedRunTimer <= 15)
+ {
+ events.ScheduleEvent(EVENT_UPDATE_ZULAMAN_TIMER, 60000);
+ DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER_ENABLED, 1);
+ DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER, SpeedRunTimer);
+ }
+ }
+
+ protected:
+ EventMap events;
+ ObjectGuid AkilzonGUID;
+ ObjectGuid NalorakkGUID;
+ ObjectGuid JanalaiGUID;
+ ObjectGuid HalazziGUID;
+ ObjectGuid HexLordMalacrassGUID;
+ ObjectGuid DaakaraGUID;
+ ObjectGuid VoljinGUID;
+ ObjectGuid HexLordTriggerGUID;
+ ObjectGuid StrangeGongGUID;
+ ObjectGuid MasiveGateGUID;
+ uint32 SpeedRunTimer;
+ uint32 ZulAmanState;
+ uint32 ZulAmanBossCount;
+ };
+
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
+ {
+ return new instance_zulaman_InstanceScript(map);
+ }
};
void AddSC_instance_zulaman()
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
index 3b52e6775b2..153040fdcfe 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2015 TrinityCore
- * Copyright (C) 2006-2009 ScriptDev2
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,421 +15,209 @@
* with this program. If not, see .
*/
-/* ScriptData
-SDName: Zulaman
-SD%Complete: 90
-SDComment: Forest Frog will turn into different NPC's. Workaround to prevent new entry from running this script
-SDCategory: Zul'Aman
-EndScriptData */
-
-/* ContentData
-npc_forest_frog
-EndContentData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
-#include "zulaman.h"
#include "Player.h"
-#include "SpellInfo.h"
+#include "CreatureTextMgr.h"
#include "SpellScript.h"
-
-/*######
-## npc_forest_frog
-######*/
-
-enum ForestFrog
-{
- // Spells
- SPELL_REMOVE_AMANI_CURSE = 43732,
- SPELL_PUSH_MOJO = 43923,
-
- // Creatures
- NPC_FOREST_FROG = 24396
-
-};
-
-class npc_forest_frog : public CreatureScript
-{
- public:
-
- npc_forest_frog()
- : CreatureScript("npc_forest_frog")
- {
- }
-
- struct npc_forest_frogAI : public ScriptedAI
- {
- npc_forest_frogAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = creature->GetInstanceScript();
- }
-
- InstanceScript* instance;
-
- void Reset() override { }
-
- void EnterCombat(Unit* /*who*/) override { }
-
- void DoSpawnRandom()
- {
- uint32 cEntry = 0;
- switch (rand32() % 10)
- {
- case 0: cEntry = 24397; break; //Mannuth
- case 1: cEntry = 24403; break; //Deez
- case 2: cEntry = 24404; break; //Galathryn
- case 3: cEntry = 24405; break; //Adarrah
- case 4: cEntry = 24406; break; //Fudgerick
- case 5: cEntry = 24407; break; //Darwen
- case 6: cEntry = 24445; break; //Mitzi
- case 7: cEntry = 24448; break; //Christian
- case 8: cEntry = 24453; break; //Brennan
- case 9: cEntry = 24455; break; //Hollee
- }
-
- if (!instance->GetData(TYPE_RAND_VENDOR_1))
- if (rand32() % 10 == 1) cEntry = 24408; //Gunter
- if (!instance->GetData(TYPE_RAND_VENDOR_2))
- if (rand32() % 10 == 1) cEntry = 24409; //Kyren
-
- if (cEntry) me->UpdateEntry(cEntry);
-
- if (cEntry == 24408) instance->SetData(TYPE_RAND_VENDOR_1, DONE);
- if (cEntry == 24409) instance->SetData(TYPE_RAND_VENDOR_2, DONE);
- }
-
- void SpellHit(Unit* caster, const SpellInfo* spell) override
- {
- if (spell->Id == SPELL_REMOVE_AMANI_CURSE && caster->GetTypeId() == TYPEID_PLAYER && me->GetEntry() == NPC_FOREST_FROG)
- {
- //increase or decrease chance of mojo?
- if (rand32() % 99 == 50) DoCast(caster, SPELL_PUSH_MOJO, true);
- else DoSpawnRandom();
- }
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI(creature);
- }
-};
-
-/*######
-## npc_zulaman_hostage
-######*/
-
-#define GOSSIP_HOSTAGE1 "I am glad to help you."
-
-static uint32 HostageEntry[] = {23790, 23999, 24024, 24001};
-static uint32 ChestEntry[] = {186648, 187021, 186672, 186667};
-
-class npc_zulaman_hostage : public CreatureScript
-{
- public:
- npc_zulaman_hostage() : CreatureScript("npc_zulaman_hostage") { }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HOSTAGE1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
- return true;
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- player->PlayerTalkClass->ClearMenus();
-
- if (action == GOSSIP_ACTION_INFO_DEF + 1)
- player->CLOSE_GOSSIP_MENU();
-
- if (!creature->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP))
- return true;
-
- creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
-
- InstanceScript* instance = creature->GetInstanceScript();
- if (instance)
- {
- //uint8 progress = instance->GetData(DATA_CHESTLOOTED);
- instance->SetData(DATA_CHESTLOOTED, 0);
- float x, y, z;
- creature->GetPosition(x, y, z);
- uint32 entry = creature->GetEntry();
- for (uint8 i = 0; i < 4; ++i)
- {
- if (HostageEntry[i] == entry)
- {
- creature->SummonGameObject(ChestEntry[i], x-2, y, z, 0, 0, 0, 0, 0, 0);
- break;
- }
- }
- }
- return true;
- }
-};
-
-/*######
-## npc_harrison_jones
-######*/
+#include "zulaman.h"
enum Says
{
- SAY_HARRISON_0 = 0,
- SAY_HARRISON_1 = 1,
- SAY_HARRISON_2 = 0,
- SAY_HARRISON_3 = 1
+ // Vol'jin
+ SAY_INTRO_1 = 0,
+ SAY_INTRO_2 = 1,
+ SAY_INTRO_3 = 2,
+ SAY_INTRO_4 = 3,
+ SAY_INTRO_FAIL = 4,
+
+ // Hex Lord Malacrass
+ SAY_HEXLOR_INTRO = 0
};
enum Spells
{
- SPELL_BANGING_THE_GONG = 45225,
- SPELL_STEALTH = 34189,
- SPELL_COSMETIC_SPEAR_THROW = 43647
+ // Vol'jin
+ SPELL_BANGING_THE_GONG = 45225
};
enum Events
{
- GONG_EVENT_1 = 1,
- GONG_EVENT_2 = 2,
- GONG_EVENT_3 = 3,
- GONG_EVENT_4 = 4,
- GONG_EVENT_5 = 5,
- GONG_EVENT_6 = 6,
- GONG_EVENT_7 = 7,
- GONG_EVENT_8 = 8,
- GONG_EVENT_9 = 9,
- GONG_EVENT_10 = 10,
- GONG_EVENT_11 = 11
+ 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
};
-enum Waypoints
+enum Points
{
- HARRISON_MOVE_1 = 860440,
- HARRISON_MOVE_2 = 860441,
- HARRISON_MOVE_3 = 860442
+ POINT_INTRO = 1,
+ POINT_STRANGE_GONG = 2,
+ POINT_START_DOOR_OPENING_1 = 3,
+ POINT_START_DOOR_OPENING_2 = 4
};
-enum DisplayIds
+enum Misc
{
- MODEL_HARRISON_JONES_0 = 22340,
- MODEL_HARRISON_JONES_1 = 22354,
- MODEL_HARRISON_JONES_2 = 22347
+ ITEM_VIRTUAL_ITEM = 5301
};
-enum EntryIds
+Position const VoljinIntroWaypoint[4] =
{
- NPC_HARRISON_JONES_1 = 24375,
- NPC_HARRISON_JONES_2 = 24365,
- NPC_AMANISHI_GUARDIAN = 23597,
+ { 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 },
};
-enum Weapons
-{
- WEAPON_MACE = 5301,
- WEAPON_SPEAR = 13631
-};
-
-class npc_harrison_jones : public CreatureScript
+class npc_voljin_zulaman : public CreatureScript
{
public:
+ npc_voljin_zulaman() : CreatureScript("npc_voljin_zulaman") { }
- npc_harrison_jones() : CreatureScript("npc_harrison_jones")
+ struct npc_voljin_zulamanAI : public ScriptedAI
{
- }
-
- struct npc_harrison_jonesAI : public ScriptedAI
- {
- npc_harrison_jonesAI(Creature* creature) : ScriptedAI(creature)
+ npc_voljin_zulamanAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript())
{
- Initialize();
- instance = creature->GetInstanceScript();
+ me->SetDisplayId(me->GetCreatureTemplate()->Modelid1);
+ if (_instance->GetData(DATA_ZULAMAN_STATE) == NOT_STARTED)
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
}
- void Initialize()
- {
- _gongEvent = 0;
- _gongTimer = 0;
- uiTargetGUID = 0;
- }
-
- InstanceScript* instance;
-
- uint8 _gongEvent;
- uint32 _gongTimer;
- uint64 uiTargetGUID;
-
void Reset() override
{
- Initialize();
+ _gongCount = 0;
}
- void EnterCombat(Unit* /*who*/) override { }
-
void sGossipSelect(Player* player, uint32 sender, uint32 action) override
{
- if (me->GetCreatureTemplate()->GossipMenuId == sender && !action)
- {
- player->CLOSE_GOSSIP_MENU();
- me->SetFacingToObject(player);
+ if (_instance->GetData(DATA_ZULAMAN_STATE) != NOT_STARTED)
+ return;
+
+ if (me->GetCreatureTemplate()->GossipMenuId == sender && !action)
+ {
+ _events.Reset();
+ me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- Talk(SAY_HARRISON_0);
- _gongEvent = GONG_EVENT_1;
- _gongTimer = 4000;
- }
+ me->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE);
+ _events.ScheduleEvent(EVENT_INTRO_MOVEPOINT_1, 1000);
+ Talk(SAY_INTRO_1, player);
+ me->SetWalk(true);
+ }
}
- void SpellHit(Unit*, const SpellInfo* spell) override
+ void DoAction(int32 action) override
{
- if (spell->Id == SPELL_COSMETIC_SPEAR_THROW)
+ if (action == ACTION_START_ZULAMAN)
{
- me->RemoveAllAuras();
- me->SetEntry(NPC_HARRISON_JONES_2);
- me->SetDisplayId(MODEL_HARRISON_JONES_2);
- me->SetTarget(ObjectGuid::Empty);
- me->SetByteValue(UNIT_FIELD_BYTES_1, 0, UNIT_STAND_STATE_DEAD);
- me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
- instance->SetData(DATA_GONGEVENT, DONE);
+ if (++_gongCount == 10)
+ _events.ScheduleEvent(EVENT_START_DOOR_OPENING_1, 500);
}
}
void UpdateAI(uint32 diff) override
{
- if (_gongEvent)
+ _events.Update(diff);
+ while (uint32 eventId = _events.ExecuteEvent())
{
- if (_gongTimer <= diff)
+ switch (eventId)
{
- switch (_gongEvent)
- {
- case GONG_EVENT_1:
- me->GetMotionMaster()->MovePath(HARRISON_MOVE_1, false);
- _gongEvent = GONG_EVENT_2;
- _gongTimer = 12000;
- break;
- case GONG_EVENT_2:
- me->SetFacingTo(6.235659f);
- Talk(SAY_HARRISON_1);
- DoCast(me, SPELL_BANGING_THE_GONG);
- me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_MACE));
- me->SetSheath(SHEATH_STATE_MELEE);
- _gongEvent = GONG_EVENT_3;
- _gongTimer = 4000;
- break;
- case GONG_EVENT_3:
- if (GameObject* gong = me->GetMap()->GetGameObject(instance->GetGuidData(GO_STRANGE_GONG)))
- gong->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- _gongEvent = GONG_EVENT_4;
- _gongTimer = 105000;
- break;
- case GONG_EVENT_4:
- me->RemoveAura(SPELL_BANGING_THE_GONG);
- if (GameObject* gong = me->GetMap()->GetGameObject(instance->GetGuidData(GO_STRANGE_GONG)))
- gong->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
-
- // trigger or gong will need to be scripted to set IN_PROGRESS after enough hits.
- // This is temp workaround.
- instance->SetData(DATA_GONGEVENT, IN_PROGRESS); // to be removed.
-
- if (instance->GetData(DATA_GONGEVENT) == IN_PROGRESS)
- {
- // Players are Now Saved to instance at SPECIAL (Player should be notified?)
- me->GetMotionMaster()->MovePath(HARRISON_MOVE_2, false);
- _gongEvent = GONG_EVENT_5;
- _gongTimer = 5000;
- }
- else
- {
- _gongTimer = 1000;
- _gongEvent = GONG_EVENT_9;
- }
- break;
- case GONG_EVENT_5:
- me->SetEntry(NPC_HARRISON_JONES_1);
- me->SetDisplayId(MODEL_HARRISON_JONES_1);
- Talk(SAY_HARRISON_2);
- _gongTimer = 12000;
- _gongEvent = GONG_EVENT_6;
- break;
- case GONG_EVENT_6:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING);
- Talk(SAY_HARRISON_3);
- _gongTimer = 7000;
- _gongEvent = GONG_EVENT_7;
- break;
- case GONG_EVENT_7:
- if (!uiTargetGUID)
- {
- std::list targetList;
- GetCreatureListWithEntryInGrid(targetList, me, NPC_AMANISHI_GUARDIAN, 26.0f);
- if (!targetList.empty())
- {
- for (std::list::const_iterator itr = targetList.begin(); itr != targetList.end(); ++itr)
- {
- if (Creature* ptarget = *itr)
- {
- if (ptarget->GetPositionX() > 120)
- {
- ptarget->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_SPEAR));
- ptarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- ptarget->SetReactState(REACT_PASSIVE);
- ptarget->AI()->SetData(0, 1);
- }
- else
- {
- ptarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- ptarget->SetReactState(REACT_PASSIVE);
- ptarget->AI()->SetData(0, 2);
- }
- }
- }
- }
- }
-
- if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetGuidData(GO_MASSIVE_GATE)))
- gate->SetGoState(GO_STATE_ACTIVE);
- _gongTimer = 2000;
- _gongEvent = GONG_EVENT_8;
- break;
- case GONG_EVENT_8:
- DoCast(me, SPELL_STEALTH);
- me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(0));
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
- me->GetMotionMaster()->MovePath(HARRISON_MOVE_3, false);
- _gongTimer = 1000;
- _gongEvent = 0;
- break;
- case GONG_EVENT_9:
- me->GetMotionMaster()->MovePoint(0, 120.687f, 1674.0f, 42.0217f);
- _gongTimer = 12000;
- _gongEvent = GONG_EVENT_10;
- break;
- case GONG_EVENT_10:
- me->SetFacingTo(1.59044f);
- _gongEvent = 11;
- _gongTimer = 6000;
- break;
- case GONG_EVENT_11:
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
-
- instance->SetData(DATA_GONGEVENT, NOT_STARTED);
- _gongEvent = 0;
- _gongTimer = 1000;
- break;
- }
+ case EVENT_INTRO_MOVEPOINT_1:
+ me->GetMotionMaster()->MovePoint(POINT_INTRO, VoljinIntroWaypoint[0]);
+ _events.ScheduleEvent(EVENT_INTRO_MOVEPOINT_2, 1000);
+ break;
+ case EVENT_INTRO_MOVEPOINT_2:
+ me->GetMotionMaster()->MovePoint(POINT_STRANGE_GONG, VoljinIntroWaypoint[1]);
+ _events.ScheduleEvent(EVENT_INTRO_MOVEPOINT_3, 4000);
+ break;
+ case EVENT_INTRO_MOVEPOINT_3:
+ Talk(SAY_INTRO_2);
+ _events.ScheduleEvent(EVENT_BANGING_THE_GONG, 3000);
+ case EVENT_BANGING_THE_GONG:
+ DoCast(me, SPELL_BANGING_THE_GONG);
+ if (GameObject* strangeGong = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(DATA_STRANGE_GONG)))
+ strangeGong->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, uint32(ITEM_VIRTUAL_ITEM));
+ break;
+ case EVENT_START_DOOR_OPENING_1:
+ me->RemoveAura(SPELL_BANGING_THE_GONG);
+ _events.ScheduleEvent(EVENT_START_DOOR_OPENING_2, 500);
+ break;
+ case EVENT_START_DOOR_OPENING_2:
+ me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, uint32(0));
+ if (GameObject* strangeGong = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(DATA_STRANGE_GONG)))
+ strangeGong->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ _events.ScheduleEvent(EVENT_START_DOOR_OPENING_3, 500);
+ break;
+ case EVENT_START_DOOR_OPENING_3:
+ me->GetMotionMaster()->MovePoint(POINT_START_DOOR_OPENING_1, VoljinIntroWaypoint[2]);
+ break;
+ case EVENT_START_DOOR_OPENING_4:
+ _instance->SetData(DATA_ZULAMAN_STATE, IN_PROGRESS);
+ if (GameObject* masiveGate = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(DATA_MASSIVE_GATE)))
+ masiveGate->SetGoState(GO_STATE_ACTIVE);
+ _events.ScheduleEvent(EVENT_START_DOOR_OPENING_5, 3000);
+ break;
+ case EVENT_START_DOOR_OPENING_5:
+ Talk(SAY_INTRO_4);
+ _events.ScheduleEvent(EVENT_START_DOOR_OPENING_6, 6000);
+ 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 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_HEXLORD_TRIGGER)))
+ sCreatureTextMgr->SendChat(hexLordTrigger, SAY_HEXLOR_INTRO, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP);
+ break;
+ default:
+ break;
}
- else
- _gongTimer -= diff;
}
}
+
+ void MovementInform(uint32 movementType, uint32 pointId) override
+ {
+ if (movementType != POINT_MOTION_TYPE)
+ return;
+
+ switch (pointId)
+ {
+ case POINT_STRANGE_GONG:
+ if (GameObject* strangeGong = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(DATA_STRANGE_GONG)))
+ me->SetFacingToObject(strangeGong); // setInFront
+ 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);
+ break;
+ default:
+ break;
+ }
+ }
+
+ private:
+ InstanceScript* _instance;
+ EventMap _events;
+ uint8 _gongCount;
};
CreatureAI* GetAI(Creature* creature) const override
{
- return GetInstanceAI(creature);
+ return GetInstanceAI(creature);
}
};
+// 45226 - Banging the Gong
class spell_banging_the_gong : public SpellScriptLoader
{
public:
@@ -458,11 +245,8 @@ class spell_banging_the_gong : public SpellScriptLoader
}
};
-
void AddSC_zulaman()
{
- new npc_forest_frog();
- new npc_zulaman_hostage();
- new npc_harrison_jones();
+ new npc_voljin_zulaman();
new spell_banging_the_gong();
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h
index 74162f0859d..c8d42b79431 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h
+++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2015 TrinityCore
- * Copyright (C) 2006-2009 ScriptDev2
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -19,45 +18,74 @@
#ifndef DEF_ZULAMAN_H
#define DEF_ZULAMAN_H
+uint32 const EncounterCount = 6;
+#define ZulAmanScriptName "instance_zulaman"
#define DataHeader "ZA"
enum DataTypes
{
- DATA_GONGEVENT = 0,
- DATA_NALORAKKEVENT = 1,
- DATA_AKILZONEVENT = 2,
- DATA_JANALAIEVENT = 3,
- DATA_HALAZZIEVENT = 4,
- DATA_HEXLORDEVENT = 5,
- DATA_ZULJINEVENT = 6,
- DATA_CHESTLOOTED = 7,
- TYPE_RAND_VENDOR_1 = 8,
- TYPE_RAND_VENDOR_2 = 9
+ // BossState
+ DATA_AKILZONEVENT = 0,
+ DATA_NALORAKKEVENT = 1,
+ DATA_JANALAIEVENT = 2,
+ DATA_HALAZZIEVENT = 3,
+ DATA_HEXLORDEVENT = 4,
+ DATA_DAAKARAEVENT = 5,
+
+ // Data64
+ DATA_HEXLORD_TRIGGER,
+
+ DATA_STRANGE_GONG,
+ DATA_MASSIVE_GATE,
+
+ // SetData
+ DATA_ZULAMAN_STATE
};
enum CreatureIds
{
- NPC_HARRISON_JONES = 24358,
- NPC_JANALAI = 23578,
- NPC_ZULJIN = 23863,
- NPC_HEXLORD = 24239,
- NPC_HALAZZI = 23577,
- NPC_NALORAKK = 23576
+ NPC_AKILZON = 23574,
+ NPC_NALORAKK = 23576,
+ NPC_JANALAI = 23578,
+ NPC_HALAZZI = 23577,
+ NPC_HEXLORD = 24239,
+ NPC_DAAKARA = 23863,
+
+ NPC_VOLJIN = 52924,
+ NPC_HEXLORD_TRIGGER = 24363
};
-enum GameobjectIds
+enum GameObjectIds
{
- GO_DOOR_HALAZZI = 186303,
- GO_GATE_ZULJIN = 186304,
- GO_GATE_HEXLORD = 186305,
- GO_MASSIVE_GATE = 186728,
- GO_DOOR_AKILZON = 186858,
- GO_DOOR_ZULJIN = 186859,
- GO_HARKORS_SATCHEL = 187021,
- GO_TANZARS_TRUNK = 186648,
- GO_ASHLIS_BAG = 186672,
- GO_KRAZS_PACKAGE = 186667,
- GO_STRANGE_GONG = 187359
+ GO_STRANGE_GONG = 187359,
+ GO_MASSIVE_GATE = 186728,
};
+enum ZulAmanEvents
+{
+ EVENT_START_ZULAMAN = 15897,
+ EVENT_UPDATE_ZULAMAN_TIMER = 1,
+};
+
+enum ZulAmanAction
+{
+ ACTION_START_ZULAMAN = 1
+};
+
+enum ZulAmanWorldStates
+{
+ WORLD_STATE_ZULAMAN_TIMER_ENABLED = 3104,
+ WORLD_STATE_ZULAMAN_TIMER = 3106,
+};
+
+template
+CreatureAI* GetZulAmanAI(Creature* creature)
+{
+ if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
+ if (instance->GetInstanceScript())
+ if (instance->GetScriptId() == sObjectMgr->GetScriptId(ZulAmanScriptName))
+ return new AI(creature);
+ return NULL;
+}
+
#endif