mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 08:28:32 +01:00
Core/Scripts: Some cleanup of Zul'aman Instance script. Gong event in progress and will allow doors to open.
This commit is contained in:
@@ -29,13 +29,15 @@ EndScriptData */
|
||||
#include "Player.h"
|
||||
#include "TemporarySummon.h"
|
||||
|
||||
#define MAX_ENCOUNTER 6
|
||||
#define RAND_VENDOR 2
|
||||
enum Misc
|
||||
{
|
||||
MAX_ENCOUNTER = 6,
|
||||
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,7 +53,6 @@ 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
|
||||
|
||||
};
|
||||
|
||||
class instance_zulaman : public InstanceMapScript
|
||||
@@ -70,9 +71,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,9 +96,10 @@ 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;
|
||||
@@ -122,11 +126,14 @@ 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_HARRISON_JONES:
|
||||
if (m_auiEncounter[0])
|
||||
creature->SetVisible(false);
|
||||
case NPC_JANALAI:
|
||||
case NPC_ZULJIN:
|
||||
case NPC_HEXLORD:
|
||||
case NPC_HALAZZI:
|
||||
case NPC_NALORAKK:
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
@@ -135,18 +142,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 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 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_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 +181,10 @@ class instance_zulaman : public InstanceMapScript
|
||||
|
||||
void CheckInstanceStatus()
|
||||
{
|
||||
if (BossKilled >= 4)
|
||||
if (BossKilled >= DATA_HALAZZIEVENT)
|
||||
HandleGameObject(HexLordGateGUID, true);
|
||||
|
||||
if (BossKilled >= 5)
|
||||
if (BossKilled >= DATA_HEXLORDEVENT)
|
||||
HandleGameObject(ZulJinGateGUID, true);
|
||||
}
|
||||
|
||||
@@ -214,49 +222,56 @@ class instance_zulaman : public InstanceMapScript
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_NALORAKKEVENT:
|
||||
case DATA_GONGEVENT:
|
||||
m_auiEncounter[0] = data;
|
||||
if (data == DONE)
|
||||
{
|
||||
|
||||
}
|
||||
break;
|
||||
case DATA_NALORAKKEVENT:
|
||||
m_auiEncounter[1] = 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[2] = 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;
|
||||
m_auiEncounter[3] = data;
|
||||
if (data == DONE) SummonHostage(2);
|
||||
break;
|
||||
case DATA_HALAZZIEVENT:
|
||||
m_auiEncounter[3] = data;
|
||||
m_auiEncounter[4] = data;
|
||||
HandleGameObject(HalazziDoorGUID, data != IN_PROGRESS);
|
||||
if (data == DONE) SummonHostage(3);
|
||||
break;
|
||||
case DATA_HEXLORDEVENT:
|
||||
m_auiEncounter[4] = data;
|
||||
m_auiEncounter[5] = data;
|
||||
if (data == IN_PROGRESS)
|
||||
HandleGameObject(HexLordGateGUID, false);
|
||||
else if (data == NOT_STARTED)
|
||||
CheckInstanceStatus();
|
||||
break;
|
||||
case DATA_ZULJINEVENT:
|
||||
m_auiEncounter[5] = data;
|
||||
m_auiEncounter[6] = data;
|
||||
HandleGameObject(ZulJinDoorGUID, data != IN_PROGRESS);
|
||||
break;
|
||||
case DATA_CHESTLOOTED:
|
||||
@@ -274,10 +289,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 +303,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[0];
|
||||
case DATA_NALORAKKEVENT: return m_auiEncounter[1];
|
||||
case DATA_AKILZONEVENT: return m_auiEncounter[2];
|
||||
case DATA_JANALAIEVENT: return m_auiEncounter[3];
|
||||
case DATA_HALAZZIEVENT: return m_auiEncounter[4];
|
||||
case DATA_HEXLORDEVENT: return m_auiEncounter[5];
|
||||
case DATA_ZULJINEVENT: return m_auiEncounter[6];
|
||||
case DATA_CHESTLOOTED: return ChestLooted;
|
||||
case TYPE_RAND_VENDOR_1: return RandVendor[0];
|
||||
case TYPE_RAND_VENDOR_2: return RandVendor[1];
|
||||
@@ -312,13 +328,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
|
||||
|
||||
@@ -199,9 +199,184 @@ class npc_zulaman_hostage : public CreatureScript
|
||||
}
|
||||
};
|
||||
|
||||
/*######
|
||||
## npc_harrison_jones
|
||||
######*/
|
||||
|
||||
enum Says
|
||||
{
|
||||
SAY_HARRISON_0 = 0,
|
||||
SAY_HARRISON_1 = 1,
|
||||
SAY_HARRISON_2 = 2,
|
||||
SAY_HARRISON_3 = 3
|
||||
};
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_BANGING_THE_GONG = 45225,
|
||||
SPELL_STEALTH = 34189
|
||||
};
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
enum Entrys
|
||||
{
|
||||
NPC_HARRISON_JONES_2 = 24375
|
||||
};
|
||||
|
||||
enum Waypoints
|
||||
{
|
||||
HARRISON_MOVE_1 = 861770,
|
||||
HARRISON_MOVE_2 = 861771,
|
||||
HARRISON_MOVE_3 = 861772
|
||||
};
|
||||
|
||||
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;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
_gongEvent = 0;
|
||||
_gongTimer = 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);
|
||||
_gongEvent = GONG_EVENT_1;
|
||||
_gongTimer = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 const diff)
|
||||
{
|
||||
if (_gongEvent)
|
||||
{
|
||||
if (_gongTimer <= diff)
|
||||
{
|
||||
switch (_gongEvent)
|
||||
{
|
||||
case GONG_EVENT_1:
|
||||
Talk(SAY_HARRISON_0);
|
||||
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||
_gongTimer = 4000;
|
||||
_gongEvent = GONG_EVENT_2;
|
||||
break;
|
||||
case GONG_EVENT_2:
|
||||
me->GetMotionMaster()->MovePath(HARRISON_MOVE_1,false);
|
||||
_gongTimer = 12000;
|
||||
_gongEvent = GONG_EVENT_3;
|
||||
break;
|
||||
case GONG_EVENT_3:
|
||||
Talk(SAY_HARRISON_1);
|
||||
_gongTimer = 5000;
|
||||
_gongEvent = GONG_EVENT_4;
|
||||
break;
|
||||
case GONG_EVENT_4:
|
||||
DoCast(me, SPELL_BANGING_THE_GONG);
|
||||
if (GameObject* gong = me->GetMap()->GetGameObject(instance->GetData64(GO_STRANGE_GONG)))
|
||||
gong->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_NOT_SELECTABLE);
|
||||
_gongTimer = 120000;
|
||||
_gongEvent = GONG_EVENT_5;
|
||||
break;
|
||||
case GONG_EVENT_5:
|
||||
if (GameObject* gong = me->GetMap()->GetGameObject(instance->GetData64(GO_STRANGE_GONG)))
|
||||
gong->SetFlag(GAMEOBJECT_FLAGS,GO_FLAG_NOT_SELECTABLE);
|
||||
|
||||
// Remove Aura 45222 from all players
|
||||
|
||||
if (instance)
|
||||
instance->SetData(DATA_GONGEVENT, DONE); // This is temp
|
||||
|
||||
if (instance->GetData(DATA_GONGEVENT) == DONE)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(HARRISON_MOVE_2,false);
|
||||
_gongTimer = 5000;
|
||||
_gongEvent = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
_gongTimer = 0; // Add reset at end
|
||||
_gongEvent = 0; // Add reset at end
|
||||
}
|
||||
break;
|
||||
case GONG_EVENT_6:
|
||||
me->SetEntry(24375);
|
||||
Talk(SAY_HARRISON_2);
|
||||
_gongTimer = 14000;
|
||||
_gongEvent = 7;
|
||||
break;
|
||||
case GONG_EVENT_7:
|
||||
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING);
|
||||
Talk(SAY_HARRISON_2);
|
||||
_gongTimer = 7000;
|
||||
_gongEvent = 8;
|
||||
break;
|
||||
case GONG_EVENT_8:
|
||||
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_MASSIVE_GATE)))
|
||||
gate->SetGoState(GO_STATE_ACTIVE);
|
||||
_gongTimer = 1000;
|
||||
_gongEvent = 9;
|
||||
case GONG_EVENT_9:
|
||||
DoCast(me, SPELL_STEALTH);
|
||||
me->GetMotionMaster()->MovePath(HARRISON_MOVE_3,false);
|
||||
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
|
||||
_gongTimer = 0;
|
||||
_gongEvent = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
_gongTimer -= diff;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new npc_harrison_jonesAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
void AddSC_zulaman()
|
||||
{
|
||||
new npc_forest_frog();
|
||||
new npc_zulaman_hostage();
|
||||
new npc_harrison_jones();
|
||||
}
|
||||
|
||||
|
||||
@@ -19,15 +19,44 @@
|
||||
#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 = 1,
|
||||
DATA_NALORAKKEVENT = 2,
|
||||
DATA_AKILZONEVENT = 3,
|
||||
DATA_JANALAIEVENT = 4,
|
||||
DATA_HALAZZIEVENT = 5,
|
||||
DATA_HEXLORDEVENT = 6,
|
||||
DATA_ZULJINEVENT = 7,
|
||||
DATA_CHESTLOOTED = 8,
|
||||
TYPE_RAND_VENDOR_1 = 9,
|
||||
TYPE_RAND_VENDOR_2 = 10
|
||||
};
|
||||
|
||||
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user