mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 09:44:45 +01:00
Fix merge fail
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
|
||||
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* 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<npc_forest_frogAI>(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<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->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<npc_harrison_jonesAI>(creature);
|
||||
return GetInstanceAI<npc_voljin_zulamanAI>(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();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
|
||||
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
*
|
||||
* 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<class AI>
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user