aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/EasternKingdoms
diff options
context:
space:
mode:
authorVincent_Michael <Vincent_Michael@gmx.de>2013-01-07 16:39:01 +0100
committerVincent_Michael <Vincent_Michael@gmx.de>2013-01-07 16:39:01 +0100
commitecedb798aa3094f02bedaadf459cfec7cb7c58a4 (patch)
tree1666ff41bed0084e13094ac53c1b2334a22bec3f /src/server/scripts/EasternKingdoms
parentd5163d846fcbbd94655f0ba93c81a3e2bd302b3c (diff)
parentd0e4e202658206aa40e656101334b446ebc9f18e (diff)
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts: src/server/game/Conditions/ConditionMgr.h
Diffstat (limited to 'src/server/scripts/EasternKingdoms')
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp102
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp129
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp297
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/zulaman.h48
4 files changed, 451 insertions, 125 deletions
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
index 091c9fd1f91..15c7a10a125 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -33,12 +33,10 @@ enum Spells
SPELL_WING_FLAP = 12882,
SPELL_PIERCE_ARMOR = 6016,
SPELL_DISARM = 8379,
-
SPELL_KIRTONOS_TRANSFORM = 16467,
-
SPELL_SHADOW_BOLT = 17228,
SPELL_CURSE_OF_TONGUES = 12889,
- SPELL_DONINATE_MIND = 14515
+ SPELL_DOMINATE_MIND = 14515
};
enum Events
@@ -55,37 +53,15 @@ enum Events
EVENT_DISARM = 10,
EVENT_SHADOW_BOLT = 11,
EVENT_CURSE_OF_TONGUES = 12,
- EVENT_DONINATE_MIND = 13,
+ EVENT_DOMINATE_MIND = 13,
EVENT_KIRTONOS_TRANSFORM = 14
};
-enum Points
-{
- MAX_KIRTONOS_WAYPOINTS_INTRO = 14,
- POINT_KIRTONOS_LAND = 14
-};
-
enum Misc
{
- WEAPON_KIRTONOS_STAFF = 11365
-};
-
-Position const kirtonosIntroWaypoint[MAX_KIRTONOS_WAYPOINTS_INTRO] =
-{
- {316.7087f, 71.26834f, 104.5843f, 0.0f},
- {321.1605f, 72.80973f, 104.6676f, 0.0f},
- {332.3713f, 77.98991f, 105.8621f, 0.0f},
- {333.3254f, 86.60159f, 106.6399f, 0.0f},
- {334.1263f, 101.6836f, 106.8343f, 0.0f},
- {331.0458f, 114.5935f, 106.3621f, 0.0f},
- {329.5439f, 126.7019f, 106.1399f, 0.0f},
- {335.2471f, 136.5460f, 105.7232f, 0.0f},
- {343.2100f, 139.9459f, 107.6399f, 0.0f},
- {364.3288f, 140.9012f, 109.9454f, 0.0f},
- {362.6760f, 115.6384f, 110.3065f, 0.0f},
- {341.7896f, 91.94390f, 107.1676f, 0.0f},
- {313.4945f, 93.45945f, 104.0565f, 0.0f},
- {306.3839f, 93.61675f, 104.0565f, 0.0f},
+ WEAPON_KIRTONOS_STAFF = 11365,
+ POINT_KIRTONOS_LAND = 13,
+ KIRTONOS_PATH = 105061
};
class boss_kirtonos_the_herald : public CreatureScript
@@ -113,7 +89,7 @@ class boss_kirtonos_the_herald : public CreatureScript
events.ScheduleEvent(EVENT_DISARM, urand(22000, 22000));
events.ScheduleEvent(EVENT_SHADOW_BOLT, urand(42000, 42000));
events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, urand(53000, 53000));
- events.ScheduleEvent(EVENT_DONINATE_MIND, urand(34000, 48000));
+ events.ScheduleEvent(EVENT_DOMINATE_MIND, urand(34000, 48000));
events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, urand(20000, 20000));
_EnterCombat();
}
@@ -142,12 +118,7 @@ class boss_kirtonos_the_herald : public CreatureScript
me->DespawnOrUnsummon(5000);
}
- void DamageTaken(Unit* /*killer*/, uint32 &damage)
- {
-
- }
-
- void IsSummonedBy(Unit* summoner)
+ void IsSummonedBy(Unit* /*summoner*/)
{
me->SetDisableGravity(true);
me->SetReactState(REACT_PASSIVE);
@@ -163,12 +134,13 @@ class boss_kirtonos_the_herald : public CreatureScript
BossAI::JustSummoned(summon);
}
- void MovementInform(uint32 movementType, uint32 pointId)
+ void MovementInform(uint32 type, uint32 id)
{
- if (movementType != POINT_MOTION_TYPE)
- return;
-
- _currentPoint = pointId + 1;
+ if (type == WAYPOINT_MOTION_TYPE && id == POINT_KIRTONOS_LAND)
+ {
+ _introTimer = 1500;
+ _introEvent = INTRO_2;
+ }
}
void UpdateAI(uint32 const diff)
@@ -180,13 +152,8 @@ class boss_kirtonos_the_herald : public CreatureScript
switch (_introEvent)
{
case INTRO_1:
- if (_currentPoint < POINT_KIRTONOS_LAND)
- me->GetMotionMaster()->MovePoint(_currentPoint, kirtonosIntroWaypoint[_currentPoint]);
- else
- {
- _introTimer = 1000;
- _introEvent = INTRO_2;
- }
+ me->GetMotionMaster()->MovePath(KIRTONOS_PATH,false);
+ _introEvent = 0;
break;
case INTRO_2:
me->SetWalk(true);
@@ -204,6 +171,7 @@ class boss_kirtonos_the_herald : public CreatureScript
case INTRO_4:
if (GameObject* brazier = me->GetMap()->GetGameObject(instance->GetData64(GO_BRAZIER_OF_THE_HERALD)))
brazier->SetGoState(GO_STATE_READY);
+ me->SetWalk(true);
me->SetDisableGravity(false);
DoCast(me, SPELL_KIRTONOS_TRANSFORM);
_introTimer = 1000;
@@ -227,7 +195,7 @@ class boss_kirtonos_the_herald : public CreatureScript
_introTimer -= diff;
}
- if (!UpdateVictim())
+ if (!UpdateVictim())
return;
events.Update(diff);
@@ -241,31 +209,31 @@ class boss_kirtonos_the_herald : public CreatureScript
{
case EVENT_SWOOP:
DoCast(me, SPELL_SWOOP);
- events.ScheduleEvent(EVENT_SWOOP, urand(15000, 15000));
+ events.ScheduleEvent(EVENT_SWOOP, 15000);
break;
case EVENT_WING_FLAP:
DoCast(me, SPELL_WING_FLAP);
- events.ScheduleEvent(EVENT_WING_FLAP, urand(13000, 13000));
+ events.ScheduleEvent(EVENT_WING_FLAP, 13000);
break;
case EVENT_PIERCE_ARMOR:
DoCastVictim(SPELL_PIERCE_ARMOR, true);
- events.ScheduleEvent(EVENT_PIERCE_ARMOR, urand(12000, 12000));
+ events.ScheduleEvent(EVENT_PIERCE_ARMOR, 12000);
break;
case EVENT_DISARM:
DoCastVictim(SPELL_DISARM, true);
- events.ScheduleEvent(EVENT_DISARM, urand(11000, 11000));
+ events.ScheduleEvent(EVENT_DISARM, 11000);
break;
case EVENT_SHADOW_BOLT:
DoCastVictim(SPELL_SHADOW_BOLT, true);
- events.ScheduleEvent(EVENT_SHADOW_BOLT, urand(42000, 42000));
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, 42000);
break;
case EVENT_CURSE_OF_TONGUES:
DoCastVictim(SPELL_CURSE_OF_TONGUES, true);
- events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, urand(35000, 35000));
+ events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 35000);
break;
- case EVENT_DONINATE_MIND:
- DoCastVictim(SPELL_DONINATE_MIND, true);
- events.ScheduleEvent(EVENT_DONINATE_MIND, urand(44000, 48000));
+ case EVENT_DOMINATE_MIND:
+ DoCastVictim(SPELL_DOMINATE_MIND, true);
+ events.ScheduleEvent(EVENT_DOMINATE_MIND, urand(44000, 48000));
break;
case EVENT_KIRTONOS_TRANSFORM:
if (me->HasAura(SPELL_KIRTONOS_TRANSFORM))
@@ -312,16 +280,16 @@ enum Brazier_Of_The_Herald
class go_brazier_of_the_herald : public GameObjectScript
{
-public:
- go_brazier_of_the_herald() : GameObjectScript("go_brazier_of_the_herald") { }
+ public:
+ go_brazier_of_the_herald() : GameObjectScript("go_brazier_of_the_herald") { }
- bool OnGossipHello(Player* player, GameObject* go)
- {
- go->UseDoorOrButton();
- go->PlayDirectSound(SOUND_SCREECH,0);
- player->SummonCreature(NPC_KIRTONOS, 315.028f, 70.53845f, 102.1496f, 0.3859715f, TEMPSUMMON_DEAD_DESPAWN, 900000);
- return true;
- }
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ go->UseDoorOrButton();
+ go->PlayDirectSound(SOUND_SCREECH, 0);
+ player->SummonCreature(NPC_KIRTONOS, 315.028f, 70.53845f, 102.1496f, 0.3859715f, TEMPSUMMON_DEAD_DESPAWN, 900000);
+ return true;
+ }
};
void AddSC_boss_kirtonos_the_herald()
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp
index 372811b8a8c..80f38dbd7cf 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp
@@ -29,13 +29,14 @@ EndScriptData */
#include "Player.h"
#include "TemporarySummon.h"
-#define MAX_ENCOUNTER 6
-#define RAND_VENDOR 2
+enum Misc
+{
+ MAX_ENCOUNTER = 7,
+ RAND_VENDOR = 2,
+ WORLDSTATE_SHOW_TIMER = 3104,
+ WORLDSTATE_TIME_TO_SACRIFICE = 3106
+};
-//187021 //Harkor's Satchel
-//186648 //Tanzar's Trunk
-//186672 //Ashli's Bag
-//186667 //Kraz's Package
// Chests spawn at bear/eagle/dragonhawk/lynx bosses
// The loots depend on how many bosses have been killed, but not the entries of the chests
// But we cannot add loots to gameobject, so we have to use the fixed loot_template
@@ -51,9 +52,10 @@ static SHostageInfo HostageInfo[] =
{23999, 187021, 400, 1414, 74.36f, 3.3f}, // eagle
{24001, 186672, -35, 1134, 18.71f, 1.9f}, // dragonhawk
{24024, 186667, 413, 1117, 6.32f, 3.1f} // lynx
-
};
+Position const HarrisonJonesLoc = {120.687f, 1674.0f, 42.0217f, 1.59044f};
+
class instance_zulaman : public InstanceMapScript
{
public:
@@ -70,9 +72,11 @@ class instance_zulaman : public InstanceMapScript
uint64 TanzarsTrunkGUID;
uint64 AshlisBagGUID;
uint64 KrazsPackageGUID;
+ uint64 StrangeGongGUID;
uint64 HexLordGateGUID;
uint64 ZulJinGateGUID;
+ uint64 MassiveGateGUID;
uint64 AkilzonDoorGUID;
uint64 ZulJinDoorGUID;
uint64 HalazziDoorGUID;
@@ -93,20 +97,24 @@ class instance_zulaman : public InstanceMapScript
TanzarsTrunkGUID = 0;
AshlisBagGUID = 0;
KrazsPackageGUID = 0;
-
+ StrangeGongGUID = 0;
HexLordGateGUID = 0;
ZulJinGateGUID = 0;
+ MassiveGateGUID = 0;
AkilzonDoorGUID = 0;
HalazziDoorGUID = 0;
ZulJinDoorGUID = 0;
QuestTimer = 0;
- QuestMinute = 21;
+ QuestMinute = 0;
BossKilled = 0;
ChestLooted = 0;
for (uint8 i = 0; i < RAND_VENDOR; ++i)
RandVendor[i] = NOT_STARTED;
+
+ m_auiEncounter[DATA_GONGEVENT] = NOT_STARTED;
+ instance->SummonCreature(NPC_HARRISON_JONES, HarrisonJonesLoc);
}
bool IsEncounterInProgress() const
@@ -122,11 +130,11 @@ class instance_zulaman : public InstanceMapScript
{
switch (creature->GetEntry())
{
- case 23578://janalai
- case 23863://zuljin
- case 24239://hexlord
- case 23577://halazzi
- case 23576://nalorakk
+ case NPC_JANALAI:
+ case NPC_ZULJIN:
+ case NPC_HEXLORD:
+ case NPC_HALAZZI:
+ case NPC_NALORAKK:
default: break;
}
}
@@ -135,18 +143,19 @@ class instance_zulaman : public InstanceMapScript
{
switch (go->GetEntry())
{
- case 186303: HalazziDoorGUID = go->GetGUID(); break;
- case 186304: ZulJinGateGUID = go->GetGUID(); break;
- case 186305: HexLordGateGUID = go->GetGUID(); break;
- case 186858: AkilzonDoorGUID = go->GetGUID(); break;
- case 186859: ZulJinDoorGUID = go->GetGUID(); break;
-
- case 187021: HarkorsSatchelGUID = go->GetGUID(); break;
- case 186648: TanzarsTrunkGUID = go->GetGUID(); break;
- case 186672: AshlisBagGUID = go->GetGUID(); break;
- case 186667: KrazsPackageGUID = go->GetGUID(); break;
+ case GO_DOOR_HALAZZI: HalazziDoorGUID = go->GetGUID(); break;
+ case GO_GATE_ZULJIN: ZulJinGateGUID = go->GetGUID(); break;
+ case GO_GATE_HEXLORD: HexLordGateGUID = go->GetGUID(); break;
+ case GO_MASSIVE_GATE: MassiveGateGUID = go->GetGUID(); break;
+ case GO_DOOR_AKILZON: AkilzonDoorGUID = go->GetGUID(); break;
+ case GO_DOOR_ZULJIN: ZulJinDoorGUID = go->GetGUID(); break;
+
+ case GO_HARKORS_SATCHEL: HarkorsSatchelGUID = go->GetGUID(); break;
+ case GO_TANZARS_TRUNK: TanzarsTrunkGUID = go->GetGUID(); break;
+ case GO_ASHLIS_BAG: AshlisBagGUID = go->GetGUID(); break;
+ case GO_KRAZS_PACKAGE: KrazsPackageGUID = go->GetGUID(); break;
+ case GO_STRANGE_GONG: StrangeGongGUID = go->GetGUID(); break;
default: break;
-
}
CheckInstanceStatus();
}
@@ -173,10 +182,13 @@ class instance_zulaman : public InstanceMapScript
void CheckInstanceStatus()
{
- if (BossKilled >= 4)
+ if (m_auiEncounter[DATA_GONGEVENT] == DONE)
+ HandleGameObject(MassiveGateGUID, true);
+
+ if (BossKilled >= DATA_HALAZZIEVENT)
HandleGameObject(HexLordGateGUID, true);
- if (BossKilled >= 5)
+ if (BossKilled >= DATA_HEXLORDEVENT)
HandleGameObject(ZulJinGateGUID, true);
}
@@ -214,49 +226,57 @@ class instance_zulaman : public InstanceMapScript
{
switch (type)
{
+ case DATA_GONGEVENT:
+ m_auiEncounter[DATA_GONGEVENT] = data;
+ if (data == SPECIAL)
+ SaveToDB();
+ if (data == DONE)
+ QuestMinute = 21;
+ break;
case DATA_NALORAKKEVENT:
- m_auiEncounter[0] = data;
+ m_auiEncounter[DATA_NALORAKKEVENT] = data;
if (data == DONE)
{
if (QuestMinute)
{
QuestMinute += 15;
- DoUpdateWorldState(3106, QuestMinute);
+ DoUpdateWorldState(WORLDSTATE_TIME_TO_SACRIFICE, QuestMinute);
}
SummonHostage(0);
}
break;
case DATA_AKILZONEVENT:
- m_auiEncounter[1] = data;
+ m_auiEncounter[DATA_AKILZONEVENT] = data;
HandleGameObject(AkilzonDoorGUID, data != IN_PROGRESS);
if (data == DONE)
{
if (QuestMinute)
{
QuestMinute += 10;
- DoUpdateWorldState(3106, QuestMinute);
+ DoUpdateWorldState(WORLDSTATE_TIME_TO_SACRIFICE, QuestMinute);
}
SummonHostage(1);
}
break;
case DATA_JANALAIEVENT:
- m_auiEncounter[2] = data;
- if (data == DONE) SummonHostage(2);
+ m_auiEncounter[DATA_JANALAIEVENT] = data;
+ if (data == DONE)
+ SummonHostage(2);
break;
case DATA_HALAZZIEVENT:
- m_auiEncounter[3] = data;
+ m_auiEncounter[DATA_HALAZZIEVENT] = data;
HandleGameObject(HalazziDoorGUID, data != IN_PROGRESS);
if (data == DONE) SummonHostage(3);
break;
case DATA_HEXLORDEVENT:
- m_auiEncounter[4] = data;
+ m_auiEncounter[DATA_HEXLORDEVENT] = data;
if (data == IN_PROGRESS)
HandleGameObject(HexLordGateGUID, false);
else if (data == NOT_STARTED)
CheckInstanceStatus();
break;
case DATA_ZULJINEVENT:
- m_auiEncounter[5] = data;
+ m_auiEncounter[DATA_ZULJINEVENT] = data;
HandleGameObject(ZulJinDoorGUID, data != IN_PROGRESS);
break;
case DATA_CHESTLOOTED:
@@ -274,10 +294,10 @@ class instance_zulaman : public InstanceMapScript
if (data == DONE)
{
++BossKilled;
- if (QuestMinute && BossKilled >= 4)
+ if (QuestMinute && BossKilled >= DATA_HALAZZIEVENT)
{
QuestMinute = 0;
- DoUpdateWorldState(3104, 0);
+ DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 0);
}
CheckInstanceStatus();
SaveToDB();
@@ -288,12 +308,13 @@ class instance_zulaman : public InstanceMapScript
{
switch (type)
{
- case DATA_NALORAKKEVENT: return m_auiEncounter[0];
- case DATA_AKILZONEVENT: return m_auiEncounter[1];
- case DATA_JANALAIEVENT: return m_auiEncounter[2];
- case DATA_HALAZZIEVENT: return m_auiEncounter[3];
- case DATA_HEXLORDEVENT: return m_auiEncounter[4];
- case DATA_ZULJINEVENT: return m_auiEncounter[5];
+ case DATA_GONGEVENT: return m_auiEncounter[DATA_GONGEVENT];
+ case DATA_NALORAKKEVENT: return m_auiEncounter[DATA_NALORAKKEVENT];
+ case DATA_AKILZONEVENT: return m_auiEncounter[DATA_AKILZONEVENT];
+ case DATA_JANALAIEVENT: return m_auiEncounter[DATA_JANALAIEVENT];
+ case DATA_HALAZZIEVENT: return m_auiEncounter[DATA_HALAZZIEVENT];
+ case DATA_HEXLORDEVENT: return m_auiEncounter[DATA_HEXLORDEVENT];
+ case DATA_ZULJINEVENT: return m_auiEncounter[DATA_ZULJINEVENT];
case DATA_CHESTLOOTED: return ChestLooted;
case TYPE_RAND_VENDOR_1: return RandVendor[0];
case TYPE_RAND_VENDOR_2: return RandVendor[1];
@@ -312,13 +333,27 @@ class instance_zulaman : public InstanceMapScript
QuestTimer += 60000;
if (QuestMinute)
{
- DoUpdateWorldState(3104, 1);
- DoUpdateWorldState(3106, QuestMinute);
- } else DoUpdateWorldState(3104, 0);
+ DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1);
+ DoUpdateWorldState(WORLDSTATE_TIME_TO_SACRIFICE, QuestMinute);
+ } else DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 0);
}
QuestTimer -= diff;
}
}
+
+ uint64 GetData64(uint32 type) const
+ {
+ switch (type)
+ {
+ case GO_STRANGE_GONG:
+ return StrangeGongGUID;
+ case GO_MASSIVE_GATE:
+ return MassiveGateGUID;
+ }
+
+ return 0;
+ }
+
};
InstanceScript* GetInstanceScript(InstanceMap* map) const
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
index 660f144c2dd..d140c349a4b 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
@@ -33,6 +33,7 @@ EndContentData */
#include "zulaman.h"
#include "Player.h"
#include "SpellInfo.h"
+#include "SpellScript.h"
/*######
## npc_forest_frog
@@ -199,9 +200,303 @@ class npc_zulaman_hostage : public CreatureScript
}
};
+/*######
+## npc_harrison_jones
+######*/
+
+enum Says
+{
+ SAY_HARRISON_0 = 0,
+ SAY_HARRISON_1 = 1,
+ SAY_HARRISON_2 = 0,
+ SAY_HARRISON_3 = 1
+};
+
+enum Spells
+{
+ SPELL_BANGING_THE_GONG = 45225,
+ SPELL_STEALTH = 34189,
+ SPELL_COSMETIC_SPEAR_THROW = 43647
+};
+
+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,
+ GONG_EVENT_12 = 12
+};
+
+enum Waypoints
+{
+ HARRISON_MOVE_1 = 860440,
+ HARRISON_MOVE_2 = 860441,
+ HARRISON_MOVE_3 = 860442
+};
+
+enum DisplayIds
+{
+ MODEL_HARRISON_JONES_0 = 22340,
+ MODEL_HARRISON_JONES_1 = 22354,
+ MODEL_HARRISON_JONES_2 = 22347
+};
+
+enum EntryIds
+{
+ NPC_HARRISON_JONES_1 = 24375,
+ NPC_HARRISON_JONES_2 = 24365,
+ NPC_AMANISHI_GUARDIAN = 23597,
+};
+
+enum Weapons
+{
+ WEAPON_MACE = 5301,
+ WEAPON_SPEAR = 13631
+};
+
+Position const AmanishiGuardianLoc = {120.687f, 1674.0f, 42.0217f, 1.59044f};
+
+class npc_harrison_jones : public CreatureScript
+{
+ public:
+
+ npc_harrison_jones()
+ : CreatureScript("npc_harrison_jones")
+ {
+ }
+
+ struct npc_harrison_jonesAI : public ScriptedAI
+ {
+ npc_harrison_jonesAI(Creature* creature) : ScriptedAI(creature)
+ {
+ instance = creature->GetInstanceScript();
+ }
+
+ InstanceScript* instance;
+
+ uint8 _gongEvent;
+ uint32 _gongTimer;
+ uint64 uiTargetGUID;
+
+ void Reset()
+ {
+ _gongEvent = 0;
+ _gongTimer = 0;
+ uiTargetGUID = 0;
+ }
+
+ void EnterCombat(Unit* /*who*/) {}
+
+ void sGossipSelect(Player* player, uint32 sender, uint32 action)
+ {
+ if (me->GetCreatureTemplate()->GossipMenuId == sender && !action)
+ {
+ player->CLOSE_GOSSIP_MENU();
+ me->SetInFront(player);
+ me->SendMovementFlagUpdate(true);
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ Talk(SAY_HARRISON_0);
+ instance->SetData(DATA_GONGEVENT, IN_PROGRESS);
+ _gongEvent = GONG_EVENT_1;
+ _gongTimer = 4000;
+ }
+ }
+
+ void SpellHit(Unit*, const SpellInfo* spell)
+ {
+ if (spell->Id == SPELL_COSMETIC_SPEAR_THROW)
+ {
+ me->RemoveAllAuras();
+ me->SetEntry(NPC_HARRISON_JONES_2);
+ me->SetDisplayId(MODEL_HARRISON_JONES_2);
+ me->SetTarget(0);
+ me->SetByteValue(UNIT_FIELD_BYTES_1,0,UNIT_STAND_STATE_DEAD);
+ me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
+ if (instance)
+ instance->SetData(DATA_GONGEVENT, DONE);
+ }
+ }
+
+ void UpdateAI(uint32 const diff)
+ {
+ if (_gongEvent)
+ {
+ if (_gongTimer <= diff)
+ {
+ switch (_gongEvent)
+ {
+ case GONG_EVENT_1:
+ me->GetMotionMaster()->MovePath(HARRISON_MOVE_1,false);
+ _gongTimer = 12000;
+ _gongEvent = GONG_EVENT_2;
+ 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);
+ _gongTimer = 4000;
+ _gongEvent = GONG_EVENT_3;
+ break;
+ case GONG_EVENT_3:
+ if (GameObject* gong = me->GetMap()->GetGameObject(instance->GetData64(GO_STRANGE_GONG)))
+ gong->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_NOT_SELECTABLE);
+ _gongTimer = 105000;
+ _gongEvent = GONG_EVENT_4;
+ break;
+ case GONG_EVENT_4:
+ me->RemoveAura(SPELL_BANGING_THE_GONG);
+ if (GameObject* gong = me->GetMap()->GetGameObject(instance->GetData64(GO_STRANGE_GONG)))
+ gong->SetFlag(GAMEOBJECT_FLAGS,GO_FLAG_NOT_SELECTABLE);
+
+ // trigger or gong will need to be scripted to set SPECIAL if enough players click gong.
+ // This is temp workaround.
+ if (instance)
+ instance->SetData(DATA_GONGEVENT, SPECIAL); // to be removed.
+
+ if (instance->GetData(DATA_GONGEVENT) == SPECIAL)
+ {
+ // Players are Now Saved to instance at SPECIAL (Player should be notified?)
+ me->GetMotionMaster()->MovePath(HARRISON_MOVE_2,false);
+ _gongTimer = 5000;
+ _gongEvent = 5;
+ }
+ else
+ {
+ _gongTimer = 1000;
+ _gongEvent = 10;
+ }
+ break;
+ case GONG_EVENT_5:
+ me->SetEntry(NPC_HARRISON_JONES_1);
+ me->SetDisplayId(MODEL_HARRISON_JONES_1);
+ Talk(SAY_HARRISON_2);
+ _gongTimer = 14000;
+ _gongEvent = 6;
+ break;
+ case GONG_EVENT_6:
+ me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING);
+ Talk(SAY_HARRISON_3);
+ _gongTimer = 7000;
+ _gongEvent = 7;
+ break;
+ case GONG_EVENT_7:
+ if (!uiTargetGUID)
+ {
+ std::list<Creature*> targetList;
+ GetCreatureListWithEntryInGrid(targetList, me, NPC_AMANISHI_GUARDIAN, 26.0f);
+ if (!targetList.empty())
+ {
+ for (std::list<Creature*>::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->AI()->SetData(0,1);
+ }
+ }
+ }
+ }
+ }
+
+ if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_MASSIVE_GATE)))
+ gate->SetGoState(GO_STATE_ACTIVE);
+ _gongTimer = 1000;
+ _gongEvent = 8;
+ case GONG_EVENT_8:
+ DoCast(me, SPELL_STEALTH);
+ me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(0));
+ me->GetMotionMaster()->MovePath(HARRISON_MOVE_3,false);
+ me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ _gongTimer = 100;
+ _gongEvent = 9;
+ case GONG_EVENT_9:
+ // If player in 10.0f range
+ // Send setdata to SAI for previous target
+ // SAI BELOW
+ // move 23597, guid 86194 to be deleted
+ // path 138.2242 Y: 1586.994 Z: 43.5488
+ // path 131.8407 Y: 1590.247 Z: 43.61384
+ // Reach end of path turnto 2.024582 cast Spell ID: 43647 on self hits 24365 update UNIT_VIRTUAL_ITEM_SLOT_ID: 33979
+ // wait 2 sec say text 0
+ // Set below after complete above
+ _gongTimer = 0;
+ _gongEvent = 0;
+ break;
+ case GONG_EVENT_10:
+ me->GetMotionMaster()->MovePoint(0, 120.687f, 1674.0f, 42.0217f);
+ _gongTimer = 12000;
+ _gongEvent = 11;
+ break;
+ case GONG_EVENT_11:
+ me->SetFacingTo(1.59044f);
+ _gongTimer = 6000;
+ _gongEvent = 12;
+ break;
+ case GONG_EVENT_12:
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ if (instance)
+ instance->SetData(DATA_GONGEVENT, NOT_STARTED);
+ _gongTimer = 0;
+ _gongEvent = 0;
+ break;
+ }
+ }
+ else
+ _gongTimer -= diff;
+ }
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_harrison_jonesAI(creature);
+ }
+};
+
+class spell_banging_the_gong : public SpellScriptLoader
+{
+ public:
+ spell_banging_the_gong() : SpellScriptLoader("spell_banging_the_gong") { }
+
+ class spell_banging_the_gong_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_banging_the_gong_SpellScript);
+
+ void Activate(SpellEffIndex index)
+ {
+ PreventHitDefaultEffect(index);
+ GetHitGObj()->SendCustomAnim(0);
+ }
+
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_banging_the_gong_SpellScript::Activate, EFFECT_1, SPELL_EFFECT_ACTIVATE_OBJECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_banging_the_gong_SpellScript();
+ }
+};
+
+
void AddSC_zulaman()
{
new npc_forest_frog();
new npc_zulaman_hostage();
+ new npc_harrison_jones();
+ new spell_banging_the_gong();
}
-
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h
index 7227dfaedf4..c3386f8c996 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h
+++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h
@@ -19,15 +19,43 @@
#ifndef DEF_ZULAMAN_H
#define DEF_ZULAMAN_H
-#define DATA_NALORAKKEVENT 1
-#define DATA_AKILZONEVENT 2
-#define DATA_JANALAIEVENT 3
-#define DATA_HALAZZIEVENT 4
-#define DATA_HEXLORDEVENT 5
-#define DATA_ZULJINEVENT 6
-#define DATA_CHESTLOOTED 7
-#define TYPE_RAND_VENDOR_1 8
-#define TYPE_RAND_VENDOR_2 9
+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
+};
-#endif
+enum CreatureIds
+{
+ NPC_HARRISON_JONES = 24358,
+ NPC_JANALAI = 23578,
+ NPC_ZULJIN = 23863,
+ NPC_HEXLORD = 24239,
+ NPC_HALAZZI = 23577,
+ NPC_NALORAKK = 23576
+};
+
+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
+};
+#endif