Scripts/Serpentshrine Cavern: Fixed "The Lurker Above" achievement and removed hacks for the event

--HG--
branch : trunk
This commit is contained in:
Shauren
2010-12-26 16:35:29 +01:00
parent 821c0f6c42
commit 79070ca820
6 changed files with 436 additions and 355 deletions
@@ -1040,6 +1040,14 @@ void GameObject::Use(Unit* user)
uint32 spellId = 0; uint32 spellId = 0;
bool triggered = false; bool triggered = false;
if (Player* playerUser = user->ToPlayer())
{
if (sScriptMgr->OnGossipHello(playerUser, this))
return;
AI()->GossipHello(playerUser);
}
switch(GetGoType()) switch(GetGoType())
{ {
case GAMEOBJECT_TYPE_DOOR: //0 case GAMEOBJECT_TYPE_DOOR: //0
@@ -1238,15 +1246,14 @@ void GameObject::Use(Unit* user)
//fishing bobber //fishing bobber
case GAMEOBJECT_TYPE_FISHINGNODE: //17 case GAMEOBJECT_TYPE_FISHINGNODE: //17
{ {
if (user->GetTypeId() != TYPEID_PLAYER) Player* player = user->ToPlayer();
if (!player)
return; return;
Player* player = (Player*)user;
if (player->GetGUID() != GetOwnerGUID()) if (player->GetGUID() != GetOwnerGUID())
return; return;
switch(getLootState()) switch (getLootState())
{ {
case GO_READY: // ready for loot case GO_READY: // ready for loot
{ {
@@ -294,11 +294,6 @@ void WorldSession::HandleGameObjectUseOpcode(WorldPacket & recv_data)
if (!obj) if (!obj)
return; return;
if (sScriptMgr->OnGossipHello(_player, obj))
return;
obj->AI()->GossipHello(_player);
obj->Use(_player); obj->Use(_player);
} }
+8 -5
View File
@@ -2631,12 +2631,19 @@ void Spell::EffectEnergizePct(SpellEffIndex effIndex)
void Spell::SendLoot(uint64 guid, LootType loottype) void Spell::SendLoot(uint64 guid, LootType loottype)
{ {
Player* player = (Player*)m_caster; Player* player = m_caster->ToPlayer();
if (!player) if (!player)
return; return;
if (gameObjTarget) if (gameObjTarget)
{ {
// special case, already has GossipHello inside so return and avoid calling twice
if (gameObjTarget->GetGoType() == GAMEOBJECT_TYPE_GOOBER)
{
gameObjTarget->Use(m_caster);
return;
}
if (sScriptMgr->OnGossipHello(player, gameObjTarget)) if (sScriptMgr->OnGossipHello(player, gameObjTarget))
return; return;
@@ -2662,10 +2669,6 @@ void Spell::SendLoot(uint64 guid, LootType loottype)
gameObjTarget->TriggeringLinkedGameObject(trapEntry,m_caster); gameObjTarget->TriggeringLinkedGameObject(trapEntry,m_caster);
return; return;
case GAMEOBJECT_TYPE_GOOBER:
gameObjTarget->Use(m_caster);
return;
case GAMEOBJECT_TYPE_CHEST: case GAMEOBJECT_TYPE_CHEST:
// TODO: possible must be moved to loot release (in different from linked triggering) // TODO: possible must be moved to loot release (in different from linked triggering)
if (gameObjTarget->GetGOInfo()->chest.eventId) if (gameObjTarget->GetGOInfo()->chest.eventId)
@@ -149,7 +149,10 @@ public:
void JustDied(Unit* /*Killer*/) void JustDied(Unit* /*Killer*/)
{ {
if (pInstance) if (pInstance)
{
pInstance->SetData(DATA_THELURKERBELOWEVENT, DONE); pInstance->SetData(DATA_THELURKERBELOWEVENT, DONE);
pInstance->SetData(DATA_STRANGE_POOL, IN_PROGRESS);
}
Summons.DespawnAll(); Summons.DespawnAll();
} }
@@ -193,22 +196,27 @@ public:
Submerged = false; Submerged = false;
WaitTimer2 = 500; WaitTimer2 = 500;
} }
if (!Submerged && WaitTimer2 <= diff)//wait 500ms before emerge anim if (!Submerged && WaitTimer2 <= diff)//wait 500ms before emerge anim
{ {
me->RemoveAllAuras(); me->RemoveAllAuras();
me->RemoveFlag(UNIT_NPC_EMOTESTATE,EMOTE_STATE_SUBMERGED); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
DoCast(me, SPELL_EMERGE, false); DoCast(me, SPELL_EMERGE, false);
WaitTimer2 = 60000;//never reached WaitTimer2 = 60000;//never reached
WaitTimer = 3000; WaitTimer = 3000;
} else WaitTimer2 -= diff; }
else
WaitTimer2 -= diff;
if (WaitTimer <= diff)//wait 3secs for emerge anim, then attack if (WaitTimer <= diff)//wait 3secs for emerge anim, then attack
{ {
WaitTimer = 3000; WaitTimer = 3000;
CanStartEvent=true;//fresh fished from pool CanStartEvent = true;//fresh fished from pool
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
} else WaitTimer -= diff; }
else
WaitTimer -= diff;
} }
return; return;
} }
@@ -458,9 +466,33 @@ public:
}; };
class go_strange_pool : public GameObjectScript
{
public:
go_strange_pool() : GameObjectScript("go_strange_pool") {}
bool OnGossipHello(Player* player, GameObject* go)
{
// 25%
if (InstanceScript* instanceScript = go->GetInstanceScript())
if (!urand(0, 3))
{
if (instanceScript->GetData(DATA_STRANGE_POOL) == NOT_STARTED)
{
go->CastSpell(player, 54587);
instanceScript->SetData(DATA_STRANGE_POOL, IN_PROGRESS);
}
return true;
}
return false;
}
};
void AddSC_boss_the_lurker_below() void AddSC_boss_the_lurker_below()
{ {
new boss_the_lurker_below(); new boss_the_lurker_below();
new mob_coilfang_guardian(); new mob_coilfang_guardian();
new mob_coilfang_ambusher(); new mob_coilfang_ambusher();
new go_strange_pool();
} }
@@ -49,7 +49,7 @@ EndScriptData */
class go_bridge_console : public GameObjectScript class go_bridge_console : public GameObjectScript
{ {
public: public:
go_bridge_console() : GameObjectScript("go_bridge_console") { } go_bridge_console() : GameObjectScript("go_bridge_console") { }
bool OnGossipHello(Player* /*pPlayer*/, GameObject* go) bool OnGossipHello(Player* /*pPlayer*/, GameObject* go)
@@ -64,46 +64,19 @@ public:
return true; return true;
} }
}; };
class instance_serpent_shrine : public InstanceMapScript class instance_serpent_shrine : public InstanceMapScript
{ {
public: public:
instance_serpent_shrine() : InstanceMapScript("instance_serpent_shrine", 548) { } instance_serpent_shrine() : InstanceMapScript("instance_serpent_shrine", 548) { }
InstanceScript* GetInstanceScript(InstanceMap* pMap) const
{
return new instance_serpentshrine_cavern_InstanceMapScript(pMap);
}
struct instance_serpentshrine_cavern_InstanceMapScript : public InstanceScript struct instance_serpentshrine_cavern_InstanceMapScript : public InstanceScript
{ {
instance_serpentshrine_cavern_InstanceMapScript(Map* pMap) : InstanceScript(pMap) {Initialize();}; instance_serpentshrine_cavern_InstanceMapScript(Map* pMap) : InstanceScript(pMap)
{
uint64 LurkerBelow; Initialize();
uint64 Sharkkis; }
uint64 Tidalvess;
uint64 Caribdis;
uint64 LadyVashj;
uint64 Karathress;
uint64 KarathressEvent_Starter;
uint64 LeotherasTheBlind;
uint64 LeotherasEventStarter;
uint64 ControlConsole;
uint64 BridgePart[3];
uint32 StrangePool;
uint32 FishingTimer;
uint32 LurkerSubEvent;
uint32 WaterCheckTimer;
uint32 FrenzySpawnTimer;
uint32 Water;
uint32 TrashCount;
bool ShieldGeneratorDeactivated[4];
uint32 m_auiEncounter[MAX_ENCOUNTER];
bool DoSpawnFrenzy;
void Initialize() void Initialize()
{ {
@@ -131,7 +104,6 @@ public:
ShieldGeneratorDeactivated[2] = false; ShieldGeneratorDeactivated[2] = false;
ShieldGeneratorDeactivated[3] = false; ShieldGeneratorDeactivated[3] = false;
FishingTimer = 1000; FishingTimer = 1000;
LurkerSubEvent = 0;
WaterCheckTimer = 500; WaterCheckTimer = 500;
FrenzySpawnTimer = 2000; FrenzySpawnTimer = 2000;
DoSpawnFrenzy = false; DoSpawnFrenzy = false;
@@ -142,22 +114,14 @@ public:
bool IsEncounterInProgress() const bool IsEncounterInProgress() const
{ {
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS) return true; if (m_auiEncounter[i] == IN_PROGRESS)
return true;
return false; return false;
} }
void Update (uint32 diff) void Update(uint32 diff)
{ {
//Lurker Fishing event
if (LurkerSubEvent == LURKER_FISHING)
{
if (FishingTimer <= diff)
{
LurkerSubEvent = LURKER_HOOKED;
SetData(DATA_STRANGE_POOL, IN_PROGRESS);//just fished, signal Lurker script to emerge and start fight, we use IN_PROGRESS so it won't get saved and lurker will be alway invis at start if server restarted
} else FishingTimer -= diff;
}
//Water checks //Water checks
if (WaterCheckTimer <= diff) if (WaterCheckTimer <= diff)
{ {
@@ -202,63 +166,71 @@ public:
} }
WaterCheckTimer = 500;//remove stress from core WaterCheckTimer = 500;//remove stress from core
} else WaterCheckTimer -= diff; }
else
WaterCheckTimer -= diff;
if (FrenzySpawnTimer <= diff) if (FrenzySpawnTimer <= diff)
{ {
DoSpawnFrenzy = true; DoSpawnFrenzy = true;
FrenzySpawnTimer = 2000; FrenzySpawnTimer = 2000;
} else FrenzySpawnTimer -= diff; }
else
FrenzySpawnTimer -= diff;
} }
void OnGameObjectCreate(GameObject* go) void OnGameObjectCreate(GameObject* go)
{ {
switch(go->GetEntry()) switch (go->GetEntry())
{ {
case 184568: case 184568:
ControlConsole = go->GetGUID(); ControlConsole = go->GetGUID();
go->setActive(true); go->setActive(true);
break; break;
case 184203: case 184203:
BridgePart[0] = go->GetGUID(); BridgePart[0] = go->GetGUID();
go->setActive(true); go->setActive(true);
break; break;
case 184204: case 184204:
BridgePart[1] = go->GetGUID(); BridgePart[1] = go->GetGUID();
go->setActive(true); go->setActive(true);
break; break;
case 184205: case 184205:
BridgePart[2] = go->GetGUID(); BridgePart[2] = go->GetGUID();
go->setActive(true); go->setActive(true);
break; break;
case GAMEOBJECT_FISHINGNODE_ENTRY://no way checking if fish is hooked, so we create a timed event default:
if (LurkerSubEvent == LURKER_NOT_STARTED)
{
FishingTimer = 10000+rand()%30000;//random time before lurker emerges
LurkerSubEvent = LURKER_FISHING;
}
break; break;
} }
} }
void OnCreatureCreate(Creature* creature) void OnCreatureCreate(Creature* creature)
{ {
switch(creature->GetEntry()) switch (creature->GetEntry())
{ {
case 21212: LadyVashj = creature->GetGUID(); break; case 21212:
case 21214: Karathress = creature->GetGUID(); break; LadyVashj = creature->GetGUID();
case 21966: Sharkkis = creature->GetGUID(); break; break;
case 21217: LurkerBelow = creature->GetGUID(); break; case 21214:
case 21965: Tidalvess = creature->GetGUID(); break; Karathress = creature->GetGUID();
case 21964: Caribdis = creature->GetGUID(); break; break;
case 21215: LeotherasTheBlind = creature->GetGUID(); break; case 21966:
/*case TRASHMOB_COILFANG_PRIESTESS: Sharkkis = creature->GetGUID();
case TRASHMOB_COILFANG_SHATTERER: break;
if (creature->isAlive()) case 21217:
++TrashCount; LurkerBelow = creature->GetGUID();
break;*/ break;
case 21965:
Tidalvess = creature->GetGUID();
break;
case 21964:
Caribdis = creature->GetGUID();
break;
case 21215:
LeotherasTheBlind = creature->GetGUID();
break;
default:
break;
} }
} }
@@ -272,31 +244,38 @@ public:
uint64 GetData64(uint32 identifier) uint64 GetData64(uint32 identifier)
{ {
switch(identifier) switch (identifier)
{ {
case DATA_THELURKERBELOW: return LurkerBelow; case DATA_THELURKERBELOW:
case DATA_SHARKKIS: return Sharkkis; return LurkerBelow;
case DATA_TIDALVESS: return Tidalvess; case DATA_SHARKKIS:
case DATA_CARIBDIS: return Caribdis; return Sharkkis;
case DATA_LADYVASHJ: return LadyVashj; case DATA_TIDALVESS:
case DATA_KARATHRESS: return Karathress; return Tidalvess;
case DATA_KARATHRESSEVENT_STARTER: return KarathressEvent_Starter; case DATA_CARIBDIS:
case DATA_LEOTHERAS: return LeotherasTheBlind; return Caribdis;
case DATA_LEOTHERAS_EVENT_STARTER: return LeotherasEventStarter; case DATA_LADYVASHJ:
return LadyVashj;
case DATA_KARATHRESS:
return Karathress;
case DATA_KARATHRESSEVENT_STARTER:
return KarathressEvent_Starter;
case DATA_LEOTHERAS:
return LeotherasTheBlind;
case DATA_LEOTHERAS_EVENT_STARTER:
return LeotherasEventStarter;
default:
break;
} }
return 0; return 0;
} }
void SetData(uint32 type, uint32 data) void SetData(uint32 type, uint32 data)
{ {
switch(type) switch (type)
{ {
case DATA_STRANGE_POOL: case DATA_STRANGE_POOL:
{
StrangePool = data; StrangePool = data;
if (data == NOT_STARTED)
LurkerSubEvent = LURKER_NOT_STARTED;
}
break; break;
case DATA_CONTROL_CONSOLE: case DATA_CONTROL_CONSOLE:
if (data == DONE) if (data == DONE)
@@ -305,20 +284,31 @@ public:
HandleGameObject(BridgePart[0], true); HandleGameObject(BridgePart[0], true);
HandleGameObject(BridgePart[0], true); HandleGameObject(BridgePart[0], true);
} }
ControlConsole = data;break; ControlConsole = data;
case DATA_TRASH : break;
{ case DATA_TRASH:
if (data == 1 && TrashCount < MIN_KILLS) if (data == 1 && TrashCount < MIN_KILLS)
++TrashCount;//+1 died ++TrashCount;//+1 died
SaveToDB(); SaveToDB();
break; break;
} case DATA_WATER:
case DATA_WATER : Water = data;break; Water = data;
case DATA_HYDROSSTHEUNSTABLEEVENT: m_auiEncounter[0] = data; break; break;
case DATA_LEOTHERASTHEBLINDEVENT: m_auiEncounter[1] = data; break; case DATA_HYDROSSTHEUNSTABLEEVENT:
case DATA_THELURKERBELOWEVENT: m_auiEncounter[2] = data; break; m_auiEncounter[0] = data;
case DATA_KARATHRESSEVENT: m_auiEncounter[3] = data; break; break;
case DATA_MOROGRIMTIDEWALKEREVENT: m_auiEncounter[4] = data; break; case DATA_LEOTHERASTHEBLINDEVENT:
m_auiEncounter[1] = data;
break;
case DATA_THELURKERBELOWEVENT:
m_auiEncounter[2] = data;
break;
case DATA_KARATHRESSEVENT:
m_auiEncounter[3] = data;
break;
case DATA_MOROGRIMTIDEWALKEREVENT:
m_auiEncounter[4] = data;
break;
//Lady Vashj //Lady Vashj
case DATA_LADYVASHJEVENT: case DATA_LADYVASHJEVENT:
if (data == NOT_STARTED) if (data == NOT_STARTED)
@@ -328,11 +318,22 @@ public:
ShieldGeneratorDeactivated[2] = false; ShieldGeneratorDeactivated[2] = false;
ShieldGeneratorDeactivated[3] = false; ShieldGeneratorDeactivated[3] = false;
} }
m_auiEncounter[5] = data; break; m_auiEncounter[5] = data;
case DATA_SHIELDGENERATOR1:ShieldGeneratorDeactivated[0] = (data) ? true : false; break; break;
case DATA_SHIELDGENERATOR2:ShieldGeneratorDeactivated[1] = (data) ? true : false; break; case DATA_SHIELDGENERATOR1:
case DATA_SHIELDGENERATOR3:ShieldGeneratorDeactivated[2] = (data) ? true : false; break; ShieldGeneratorDeactivated[0] = data != 0;
case DATA_SHIELDGENERATOR4:ShieldGeneratorDeactivated[3] = (data) ? true : false; break; break;
case DATA_SHIELDGENERATOR2:
ShieldGeneratorDeactivated[1] = data != 0;
break;
case DATA_SHIELDGENERATOR3:
ShieldGeneratorDeactivated[2] = data != 0;
break;
case DATA_SHIELDGENERATOR4:
ShieldGeneratorDeactivated[3] = data != 0;
break;
default:
break;
} }
if (data == DONE) if (data == DONE)
@@ -341,40 +342,52 @@ public:
uint32 GetData(uint32 type) uint32 GetData(uint32 type)
{ {
switch(type) switch (type)
{ {
case DATA_HYDROSSTHEUNSTABLEEVENT: return m_auiEncounter[0]; case DATA_HYDROSSTHEUNSTABLEEVENT:
case DATA_LEOTHERASTHEBLINDEVENT: return m_auiEncounter[1]; return m_auiEncounter[0];
case DATA_THELURKERBELOWEVENT: return m_auiEncounter[2]; case DATA_LEOTHERASTHEBLINDEVENT:
case DATA_KARATHRESSEVENT: return m_auiEncounter[3]; return m_auiEncounter[1];
case DATA_MOROGRIMTIDEWALKEREVENT: return m_auiEncounter[4]; case DATA_THELURKERBELOWEVENT:
return m_auiEncounter[2];
case DATA_KARATHRESSEVENT:
return m_auiEncounter[3];
case DATA_MOROGRIMTIDEWALKEREVENT:
return m_auiEncounter[4];
//Lady Vashj //Lady Vashj
case DATA_LADYVASHJEVENT: return m_auiEncounter[5]; case DATA_LADYVASHJEVENT:
case DATA_SHIELDGENERATOR1: return ShieldGeneratorDeactivated[0]; return m_auiEncounter[5];
case DATA_SHIELDGENERATOR2: return ShieldGeneratorDeactivated[1]; case DATA_SHIELDGENERATOR1:
case DATA_SHIELDGENERATOR3: return ShieldGeneratorDeactivated[2]; return ShieldGeneratorDeactivated[0];
case DATA_SHIELDGENERATOR4: return ShieldGeneratorDeactivated[3]; case DATA_SHIELDGENERATOR2:
return ShieldGeneratorDeactivated[1];
case DATA_SHIELDGENERATOR3:
return ShieldGeneratorDeactivated[2];
case DATA_SHIELDGENERATOR4:
return ShieldGeneratorDeactivated[3];
case DATA_CANSTARTPHASE3: case DATA_CANSTARTPHASE3:
if (ShieldGeneratorDeactivated[0] && ShieldGeneratorDeactivated[1] && ShieldGeneratorDeactivated[2] && ShieldGeneratorDeactivated[3])return 1;break; if (ShieldGeneratorDeactivated[0] && ShieldGeneratorDeactivated[1] && ShieldGeneratorDeactivated[2] && ShieldGeneratorDeactivated[3])
case DATA_STRANGE_POOL: return StrangePool; return 1;
case DATA_WATER: return Water; break;
case DATA_STRANGE_POOL:
return StrangePool;
case DATA_WATER:
return Water;
default:
break;
} }
return 0; return 0;
} }
std::string GetSaveData() std::string GetSaveData()
{ {
OUT_SAVE_INST_DATA; OUT_SAVE_INST_DATA;
std::ostringstream stream; std::ostringstream stream;
stream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " stream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " "
<< m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << TrashCount; << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << TrashCount;
char* out = new char[stream.str().length() + 1];
strcpy(out, stream.str().c_str());
if (out)
{
OUT_SAVE_INST_DATA_COMPLETE; OUT_SAVE_INST_DATA_COMPLETE;
return out; return stream.str();
}
return NULL;
} }
void Load(const char* in) void Load(const char* in)
@@ -384,17 +397,48 @@ public:
OUT_LOAD_INST_DATA_FAIL; OUT_LOAD_INST_DATA_FAIL;
return; return;
} }
OUT_LOAD_INST_DATA(in); OUT_LOAD_INST_DATA(in);
std::istringstream stream(in); std::istringstream stream(in);
stream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3] stream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3]
>> m_auiEncounter[4] >> m_auiEncounter[5] >> TrashCount; >> m_auiEncounter[4] >> m_auiEncounter[5] >> TrashCount;
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS) // Do not load an encounter as "In Progress" - reset it instead. if (m_auiEncounter[i] == IN_PROGRESS) // Do not load an encounter as "In Progress" - reset it instead.
m_auiEncounter[i] = NOT_STARTED; m_auiEncounter[i] = NOT_STARTED;
OUT_LOAD_INST_DATA_COMPLETE; OUT_LOAD_INST_DATA_COMPLETE;
} }
private:
uint64 LurkerBelow;
uint64 Sharkkis;
uint64 Tidalvess;
uint64 Caribdis;
uint64 LadyVashj;
uint64 Karathress;
uint64 KarathressEvent_Starter;
uint64 LeotherasTheBlind;
uint64 LeotherasEventStarter;
uint64 ControlConsole;
uint64 BridgePart[3];
uint32 StrangePool;
uint32 FishingTimer;
uint32 WaterCheckTimer;
uint32 FrenzySpawnTimer;
uint32 Water;
uint32 TrashCount;
bool ShieldGeneratorDeactivated[4];
uint32 m_auiEncounter[MAX_ENCOUNTER];
bool DoSpawnFrenzy;
}; };
InstanceScript* GetInstanceScript(InstanceMap* pMap) const
{
return new instance_serpentshrine_cavern_InstanceMapScript(pMap);
}
}; };
@@ -18,42 +18,42 @@
#ifndef DEF_SERPENT_SHRINE_H #ifndef DEF_SERPENT_SHRINE_H
#define DEF_SERPENT_SHRINE_H #define DEF_SERPENT_SHRINE_H
enum LurkerEventState
{
LURKER_NOT_STARTED = 0,
LURKER_FISHING = 1,
LURKER_HOOKED = 2
};
enum WaterEventState enum WaterEventState
{ {
WATERSTATE_NONE = 0, WATERSTATE_NONE = 0,
WATERSTATE_FRENZY = 1, WATERSTATE_FRENZY = 1,
WATERSTATE_SCALDING = 2 WATERSTATE_SCALDING = 2
}; };
#define DATA_CANSTARTPHASE3 1
#define DATA_CARIBDIS 2 enum DataTypes
#define DATA_HYDROSSTHEUNSTABLEEVENT 3 {
#define DATA_KARATHRESS 4 DATA_CANSTARTPHASE3 = 1,
#define DATA_KARATHRESSEVENT 5 DATA_CARIBDIS = 2,
#define DATA_KARATHRESSEVENT_STARTER 6 DATA_HYDROSSTHEUNSTABLEEVENT = 3,
#define DATA_LADYVASHJ 7 DATA_KARATHRESS = 4,
#define DATA_LADYVASHJEVENT 8 DATA_KARATHRESSEVENT = 5,
#define DATA_LEOTHERASTHEBLINDEVENT 9 DATA_KARATHRESSEVENT_STARTER = 6,
#define DATA_MOROGRIMTIDEWALKEREVENT 10 DATA_LADYVASHJ = 7,
#define DATA_SHARKKIS 11 DATA_LADYVASHJEVENT = 8,
#define DATA_SHIELDGENERATOR1 12 DATA_LEOTHERASTHEBLINDEVENT = 9,
#define DATA_SHIELDGENERATOR2 13 DATA_MOROGRIMTIDEWALKEREVENT = 10,
#define DATA_SHIELDGENERATOR3 14 DATA_SHARKKIS = 11,
#define DATA_SHIELDGENERATOR4 15 DATA_SHIELDGENERATOR1 = 12,
#define DATA_THELURKERBELOW 16 DATA_SHIELDGENERATOR2 = 13,
#define DATA_THELURKERBELOWEVENT 17 DATA_SHIELDGENERATOR3 = 14,
#define DATA_TIDALVESS 18 DATA_SHIELDGENERATOR4 = 15,
#define DATA_FATHOMLORDKARATHRESSEVENT 19 DATA_THELURKERBELOW = 16,
#define DATA_LEOTHERAS 20 DATA_THELURKERBELOWEVENT = 17,
#define DATA_LEOTHERAS_EVENT_STARTER 21 DATA_TIDALVESS = 18,
#define DATA_CONTROL_CONSOLE 22 DATA_FATHOMLORDKARATHRESSEVENT = 19,
#define DATA_STRANGE_POOL 23 DATA_LEOTHERAS = 20,
#define DATA_WATER 24 DATA_LEOTHERAS_EVENT_STARTER = 21,
#define DATA_TRASH 25 DATA_CONTROL_CONSOLE = 22,
DATA_STRANGE_POOL = 23,
DATA_WATER = 24,
DATA_TRASH = 25,
};
#endif #endif