aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.cpp15
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/SpellHandler.cpp5
-rwxr-xr-xsrc/server/game/Spells/SpellEffects.cpp13
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp40
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp624
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h62
6 files changed, 420 insertions, 339 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 809f394a2f8..ef5685ffb08 100755
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -1040,6 +1040,14 @@ void GameObject::Use(Unit* user)
uint32 spellId = 0;
bool triggered = false;
+ if (Player* playerUser = user->ToPlayer())
+ {
+ if (sScriptMgr->OnGossipHello(playerUser, this))
+ return;
+
+ AI()->GossipHello(playerUser);
+ }
+
switch(GetGoType())
{
case GAMEOBJECT_TYPE_DOOR: //0
@@ -1238,15 +1246,14 @@ void GameObject::Use(Unit* user)
//fishing bobber
case GAMEOBJECT_TYPE_FISHINGNODE: //17
{
- if (user->GetTypeId() != TYPEID_PLAYER)
+ Player* player = user->ToPlayer();
+ if (!player)
return;
- Player* player = (Player*)user;
-
if (player->GetGUID() != GetOwnerGUID())
return;
- switch(getLootState())
+ switch (getLootState())
{
case GO_READY: // ready for loot
{
diff --git a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
index 5c1687956d8..87ae02b5272 100755
--- a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
@@ -294,11 +294,6 @@ void WorldSession::HandleGameObjectUseOpcode(WorldPacket & recv_data)
if (!obj)
return;
- if (sScriptMgr->OnGossipHello(_player, obj))
- return;
-
- obj->AI()->GossipHello(_player);
-
obj->Use(_player);
}
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 60d3fe5704c..a1406a5ab18 100755
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -2631,12 +2631,19 @@ void Spell::EffectEnergizePct(SpellEffIndex effIndex)
void Spell::SendLoot(uint64 guid, LootType loottype)
{
- Player* player = (Player*)m_caster;
+ Player* player = m_caster->ToPlayer();
if (!player)
return;
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))
return;
@@ -2662,10 +2669,6 @@ void Spell::SendLoot(uint64 guid, LootType loottype)
gameObjTarget->TriggeringLinkedGameObject(trapEntry,m_caster);
return;
- case GAMEOBJECT_TYPE_GOOBER:
- gameObjTarget->Use(m_caster);
- return;
-
case GAMEOBJECT_TYPE_CHEST:
// TODO: possible must be moved to loot release (in different from linked triggering)
if (gameObjTarget->GetGOInfo()->chest.eventId)
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
index 36d8df38744..05dda6a5e26 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
@@ -149,7 +149,10 @@ public:
void JustDied(Unit* /*Killer*/)
{
if (pInstance)
+ {
pInstance->SetData(DATA_THELURKERBELOWEVENT, DONE);
+ pInstance->SetData(DATA_STRANGE_POOL, IN_PROGRESS);
+ }
Summons.DespawnAll();
}
@@ -193,22 +196,27 @@ public:
Submerged = false;
WaitTimer2 = 500;
}
+
if (!Submerged && WaitTimer2 <= diff)//wait 500ms before emerge anim
{
me->RemoveAllAuras();
- me->RemoveFlag(UNIT_NPC_EMOTESTATE,EMOTE_STATE_SUBMERGED);
+ me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
DoCast(me, SPELL_EMERGE, false);
WaitTimer2 = 60000;//never reached
WaitTimer = 3000;
- } else WaitTimer2 -= diff;
+ }
+ else
+ WaitTimer2 -= diff;
if (WaitTimer <= diff)//wait 3secs for emerge anim, then attack
{
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_NOT_SELECTABLE);
- } else WaitTimer -= diff;
+ }
+ else
+ WaitTimer -= diff;
}
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()
{
new boss_the_lurker_below();
new mob_coilfang_guardian();
new mob_coilfang_ambusher();
+ new go_strange_pool();
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
index 77730535ffb..998c9b57dd3 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
@@ -49,352 +49,396 @@ EndScriptData */
class go_bridge_console : public GameObjectScript
{
-public:
- go_bridge_console() : GameObjectScript("go_bridge_console") { }
+ public:
+ go_bridge_console() : GameObjectScript("go_bridge_console") { }
- bool OnGossipHello(Player* /*pPlayer*/, GameObject* go)
- {
- InstanceScript* pInstance = go->GetInstanceScript();
-
- if (!pInstance)
- return false;
+ bool OnGossipHello(Player* /*pPlayer*/, GameObject* go)
+ {
+ InstanceScript* pInstance = go->GetInstanceScript();
- if (pInstance)
- pInstance->SetData(DATA_CONTROL_CONSOLE, DONE);
+ if (!pInstance)
+ return false;
- return true;
- }
+ if (pInstance)
+ pInstance->SetData(DATA_CONTROL_CONSOLE, DONE);
+ return true;
+ }
};
class instance_serpent_shrine : public InstanceMapScript
{
-public:
- 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
- {
- instance_serpentshrine_cavern_InstanceMapScript(Map* pMap) : InstanceScript(pMap) {Initialize();};
-
- 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 LurkerSubEvent;
- uint32 WaterCheckTimer;
- uint32 FrenzySpawnTimer;
- uint32 Water;
- uint32 TrashCount;
-
- bool ShieldGeneratorDeactivated[4];
- uint32 m_auiEncounter[MAX_ENCOUNTER];
- bool DoSpawnFrenzy;
-
- void Initialize()
- {
- memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
-
- LurkerBelow = 0;
- Sharkkis = 0;
- Tidalvess = 0;
- Caribdis = 0;
- LadyVashj = 0;
- Karathress = 0;
- KarathressEvent_Starter = 0;
- LeotherasTheBlind = 0;
- LeotherasEventStarter = 0;
-
- ControlConsole = 0;
- BridgePart[0] = 0;
- BridgePart[1] = 0;
- BridgePart[2] = 0;
- StrangePool = 0;
- Water = WATERSTATE_FRENZY;
-
- ShieldGeneratorDeactivated[0] = false;
- ShieldGeneratorDeactivated[1] = false;
- ShieldGeneratorDeactivated[2] = false;
- ShieldGeneratorDeactivated[3] = false;
- FishingTimer = 1000;
- LurkerSubEvent = 0;
- WaterCheckTimer = 500;
- FrenzySpawnTimer = 2000;
- DoSpawnFrenzy = false;
- TrashCount = 0;
-
- }
+ public:
+ instance_serpent_shrine() : InstanceMapScript("instance_serpent_shrine", 548) { }
- bool IsEncounterInProgress() const
+ struct instance_serpentshrine_cavern_InstanceMapScript : public InstanceScript
{
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- if (m_auiEncounter[i] == IN_PROGRESS) return true;
-
- return false;
- }
+ instance_serpentshrine_cavern_InstanceMapScript(Map* pMap) : InstanceScript(pMap)
+ {
+ Initialize();
+ }
- void Update (uint32 diff)
- {
- //Lurker Fishing event
- if (LurkerSubEvent == LURKER_FISHING)
+ void Initialize()
{
- 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;
+ memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
+
+ LurkerBelow = 0;
+ Sharkkis = 0;
+ Tidalvess = 0;
+ Caribdis = 0;
+ LadyVashj = 0;
+ Karathress = 0;
+ KarathressEvent_Starter = 0;
+ LeotherasTheBlind = 0;
+ LeotherasEventStarter = 0;
+
+ ControlConsole = 0;
+ BridgePart[0] = 0;
+ BridgePart[1] = 0;
+ BridgePart[2] = 0;
+ StrangePool = 0;
+ Water = WATERSTATE_FRENZY;
+
+ ShieldGeneratorDeactivated[0] = false;
+ ShieldGeneratorDeactivated[1] = false;
+ ShieldGeneratorDeactivated[2] = false;
+ ShieldGeneratorDeactivated[3] = false;
+ FishingTimer = 1000;
+ WaterCheckTimer = 500;
+ FrenzySpawnTimer = 2000;
+ DoSpawnFrenzy = false;
+ TrashCount = 0;
+
}
- //Water checks
- if (WaterCheckTimer <= diff)
+
+ bool IsEncounterInProgress() const
{
- if (TrashCount >= MIN_KILLS)
- Water = WATERSTATE_SCALDING;
- else
- Water = WATERSTATE_FRENZY;
+ for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ if (m_auiEncounter[i] == IN_PROGRESS)
+ return true;
- Map::PlayerList const &PlayerList = instance->GetPlayers();
- if (PlayerList.isEmpty())
- return;
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
+ return false;
+ }
+
+ void Update(uint32 diff)
+ {
+ //Water checks
+ if (WaterCheckTimer <= diff)
{
- if (Player* pPlayer = i->getSource())
+ if (TrashCount >= MIN_KILLS)
+ Water = WATERSTATE_SCALDING;
+ else
+ Water = WATERSTATE_FRENZY;
+
+ Map::PlayerList const &PlayerList = instance->GetPlayers();
+ if (PlayerList.isEmpty())
+ return;
+ for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
{
- if (pPlayer->isAlive() && /*i->getSource()->GetPositionZ() <= -21.434931f*/pPlayer->IsInWater())
+ if (Player* pPlayer = i->getSource())
{
- if (Water == WATERSTATE_SCALDING)
+ if (pPlayer->isAlive() && /*i->getSource()->GetPositionZ() <= -21.434931f*/pPlayer->IsInWater())
{
-
- if (!pPlayer->HasAura(SPELL_SCALDINGWATER))
+ if (Water == WATERSTATE_SCALDING)
{
- pPlayer->CastSpell(pPlayer, SPELL_SCALDINGWATER,true);
- }
- } else if (Water == WATERSTATE_FRENZY)
- {
- //spawn frenzy
- if (DoSpawnFrenzy)
+
+ if (!pPlayer->HasAura(SPELL_SCALDINGWATER))
+ {
+ pPlayer->CastSpell(pPlayer, SPELL_SCALDINGWATER,true);
+ }
+ } else if (Water == WATERSTATE_FRENZY)
{
- if (Creature* frenzy = pPlayer->SummonCreature(MOB_COILFANG_FRENZY,pPlayer->GetPositionX(),pPlayer->GetPositionY(),pPlayer->GetPositionZ(),pPlayer->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,2000))
+ //spawn frenzy
+ if (DoSpawnFrenzy)
{
- frenzy->Attack(pPlayer,false);
- frenzy->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_LEVITATING);
+ if (Creature* frenzy = pPlayer->SummonCreature(MOB_COILFANG_FRENZY,pPlayer->GetPositionX(),pPlayer->GetPositionY(),pPlayer->GetPositionZ(),pPlayer->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,2000))
+ {
+ frenzy->Attack(pPlayer,false);
+ frenzy->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_LEVITATING);
+ }
+ DoSpawnFrenzy = false;
}
- DoSpawnFrenzy = false;
}
}
+ if (!pPlayer->IsInWater())
+ pPlayer->RemoveAurasDueToSpell(SPELL_SCALDINGWATER);
}
- if (!pPlayer->IsInWater())
- pPlayer->RemoveAurasDueToSpell(SPELL_SCALDINGWATER);
+
}
+ WaterCheckTimer = 500;//remove stress from core
+ }
+ else
+ WaterCheckTimer -= diff;
+ if (FrenzySpawnTimer <= diff)
+ {
+ DoSpawnFrenzy = true;
+ FrenzySpawnTimer = 2000;
}
- WaterCheckTimer = 500;//remove stress from core
- } else WaterCheckTimer -= diff;
- if (FrenzySpawnTimer <= diff)
- {
- DoSpawnFrenzy = true;
- FrenzySpawnTimer = 2000;
- } else FrenzySpawnTimer -= diff;
- }
+ else
+ FrenzySpawnTimer -= diff;
+ }
- void OnGameObjectCreate(GameObject* go)
- {
- switch(go->GetEntry())
+ void OnGameObjectCreate(GameObject* go)
{
- case 184568:
- ControlConsole = go->GetGUID();
- go->setActive(true);
- break;
-
- case 184203:
- BridgePart[0] = go->GetGUID();
- go->setActive(true);
- break;
-
- case 184204:
- BridgePart[1] = go->GetGUID();
- go->setActive(true);
- break;
-
- case 184205:
- BridgePart[2] = go->GetGUID();
- go->setActive(true);
- break;
- case GAMEOBJECT_FISHINGNODE_ENTRY://no way checking if fish is hooked, so we create a timed event
- if (LurkerSubEvent == LURKER_NOT_STARTED)
- {
- FishingTimer = 10000+rand()%30000;//random time before lurker emerges
- LurkerSubEvent = LURKER_FISHING;
- }
- break;
+ switch (go->GetEntry())
+ {
+ case 184568:
+ ControlConsole = go->GetGUID();
+ go->setActive(true);
+ break;
+ case 184203:
+ BridgePart[0] = go->GetGUID();
+ go->setActive(true);
+ break;
+ case 184204:
+ BridgePart[1] = go->GetGUID();
+ go->setActive(true);
+ break;
+ case 184205:
+ BridgePart[2] = go->GetGUID();
+ go->setActive(true);
+ break;
+ default:
+ break;
+ }
}
- }
- void OnCreatureCreate(Creature* creature)
- {
- switch(creature->GetEntry())
+ void OnCreatureCreate(Creature* creature)
{
- case 21212: LadyVashj = creature->GetGUID(); break;
- case 21214: Karathress = creature->GetGUID(); break;
- case 21966: Sharkkis = creature->GetGUID(); break;
- case 21217: LurkerBelow = creature->GetGUID(); break;
- case 21965: Tidalvess = creature->GetGUID(); break;
- case 21964: Caribdis = creature->GetGUID(); break;
- case 21215: LeotherasTheBlind = creature->GetGUID(); break;
- /*case TRASHMOB_COILFANG_PRIESTESS:
- case TRASHMOB_COILFANG_SHATTERER:
- if (creature->isAlive())
- ++TrashCount;
- break;*/
+ switch (creature->GetEntry())
+ {
+ case 21212:
+ LadyVashj = creature->GetGUID();
+ break;
+ case 21214:
+ Karathress = creature->GetGUID();
+ break;
+ case 21966:
+ Sharkkis = creature->GetGUID();
+ break;
+ case 21217:
+ LurkerBelow = creature->GetGUID();
+ break;
+ case 21965:
+ Tidalvess = creature->GetGUID();
+ break;
+ case 21964:
+ Caribdis = creature->GetGUID();
+ break;
+ case 21215:
+ LeotherasTheBlind = creature->GetGUID();
+ break;
+ default:
+ break;
+ }
}
- }
-
- void SetData64(uint32 type, uint64 data)
- {
- if (type == DATA_KARATHRESSEVENT_STARTER)
- KarathressEvent_Starter = data;
- if (type == DATA_LEOTHERAS_EVENT_STARTER)
- LeotherasEventStarter = data;
- }
- uint64 GetData64(uint32 identifier)
- {
- switch(identifier)
+ void SetData64(uint32 type, uint64 data)
{
- case DATA_THELURKERBELOW: return LurkerBelow;
- case DATA_SHARKKIS: return Sharkkis;
- case DATA_TIDALVESS: return Tidalvess;
- case DATA_CARIBDIS: return Caribdis;
- 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;
+ if (type == DATA_KARATHRESSEVENT_STARTER)
+ KarathressEvent_Starter = data;
+ if (type == DATA_LEOTHERAS_EVENT_STARTER)
+ LeotherasEventStarter = data;
}
- return 0;
- }
- void SetData(uint32 type, uint32 data)
- {
- switch(type)
+ uint64 GetData64(uint32 identifier)
{
- case DATA_STRANGE_POOL:
+ switch (identifier)
{
- StrangePool = data;
- if (data == NOT_STARTED)
- LurkerSubEvent = LURKER_NOT_STARTED;
+ case DATA_THELURKERBELOW:
+ return LurkerBelow;
+ case DATA_SHARKKIS:
+ return Sharkkis;
+ case DATA_TIDALVESS:
+ return Tidalvess;
+ case DATA_CARIBDIS:
+ return Caribdis;
+ 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;
}
- break;
- case DATA_CONTROL_CONSOLE:
- if (data == DONE)
+ return 0;
+ }
+
+ void SetData(uint32 type, uint32 data)
+ {
+ switch (type)
{
- HandleGameObject(BridgePart[0], true);
- HandleGameObject(BridgePart[0], true);
- HandleGameObject(BridgePart[0], true);
+ case DATA_STRANGE_POOL:
+ StrangePool = data;
+ break;
+ case DATA_CONTROL_CONSOLE:
+ if (data == DONE)
+ {
+ HandleGameObject(BridgePart[0], true);
+ HandleGameObject(BridgePart[0], true);
+ HandleGameObject(BridgePart[0], true);
+ }
+ ControlConsole = data;
+ break;
+ case DATA_TRASH:
+ if (data == 1 && TrashCount < MIN_KILLS)
+ ++TrashCount;//+1 died
+ SaveToDB();
+ break;
+ case DATA_WATER:
+ Water = data;
+ break;
+ case DATA_HYDROSSTHEUNSTABLEEVENT:
+ m_auiEncounter[0] = 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
+ case DATA_LADYVASHJEVENT:
+ if (data == NOT_STARTED)
+ {
+ ShieldGeneratorDeactivated[0] = false;
+ ShieldGeneratorDeactivated[1] = false;
+ ShieldGeneratorDeactivated[2] = false;
+ ShieldGeneratorDeactivated[3] = false;
+ }
+ m_auiEncounter[5] = data;
+ break;
+ case DATA_SHIELDGENERATOR1:
+ ShieldGeneratorDeactivated[0] = data != 0;
+ 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;
}
- ControlConsole = data;break;
- case DATA_TRASH :
- {
- if (data == 1 && TrashCount < MIN_KILLS)
- ++TrashCount;//+1 died
+
+ if (data == DONE)
SaveToDB();
- break;
- }
- case DATA_WATER : Water = data;break;
- case DATA_HYDROSSTHEUNSTABLEEVENT: m_auiEncounter[0] = 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
- case DATA_LADYVASHJEVENT:
- if (data == NOT_STARTED)
- {
- ShieldGeneratorDeactivated[0] = false;
- ShieldGeneratorDeactivated[1] = false;
- ShieldGeneratorDeactivated[2] = false;
- ShieldGeneratorDeactivated[3] = false;
- }
- m_auiEncounter[5] = data; break;
- case DATA_SHIELDGENERATOR1:ShieldGeneratorDeactivated[0] = (data) ? true : false; break;
- case DATA_SHIELDGENERATOR2:ShieldGeneratorDeactivated[1] = (data) ? true : false; break;
- case DATA_SHIELDGENERATOR3:ShieldGeneratorDeactivated[2] = (data) ? true : false; break;
- case DATA_SHIELDGENERATOR4:ShieldGeneratorDeactivated[3] = (data) ? true : false; break;
}
- if (data == DONE)
- SaveToDB();
- }
-
- uint32 GetData(uint32 type)
- {
- switch(type)
+ uint32 GetData(uint32 type)
{
- case DATA_HYDROSSTHEUNSTABLEEVENT: return m_auiEncounter[0];
- case DATA_LEOTHERASTHEBLINDEVENT: return m_auiEncounter[1];
- case DATA_THELURKERBELOWEVENT: return m_auiEncounter[2];
- case DATA_KARATHRESSEVENT: return m_auiEncounter[3];
- case DATA_MOROGRIMTIDEWALKEREVENT: return m_auiEncounter[4];
- //Lady Vashj
- case DATA_LADYVASHJEVENT: return m_auiEncounter[5];
- case DATA_SHIELDGENERATOR1: return ShieldGeneratorDeactivated[0];
- case DATA_SHIELDGENERATOR2: return ShieldGeneratorDeactivated[1];
- case DATA_SHIELDGENERATOR3: return ShieldGeneratorDeactivated[2];
- case DATA_SHIELDGENERATOR4: return ShieldGeneratorDeactivated[3];
- case DATA_CANSTARTPHASE3:
- if (ShieldGeneratorDeactivated[0] && ShieldGeneratorDeactivated[1] && ShieldGeneratorDeactivated[2] && ShieldGeneratorDeactivated[3])return 1;break;
- case DATA_STRANGE_POOL: return StrangePool;
- case DATA_WATER: return Water;
+ switch (type)
+ {
+ case DATA_HYDROSSTHEUNSTABLEEVENT:
+ return m_auiEncounter[0];
+ case DATA_LEOTHERASTHEBLINDEVENT:
+ return m_auiEncounter[1];
+ case DATA_THELURKERBELOWEVENT:
+ return m_auiEncounter[2];
+ case DATA_KARATHRESSEVENT:
+ return m_auiEncounter[3];
+ case DATA_MOROGRIMTIDEWALKEREVENT:
+ return m_auiEncounter[4];
+ //Lady Vashj
+ case DATA_LADYVASHJEVENT:
+ return m_auiEncounter[5];
+ case DATA_SHIELDGENERATOR1:
+ return ShieldGeneratorDeactivated[0];
+ case DATA_SHIELDGENERATOR2:
+ return ShieldGeneratorDeactivated[1];
+ case DATA_SHIELDGENERATOR3:
+ return ShieldGeneratorDeactivated[2];
+ case DATA_SHIELDGENERATOR4:
+ return ShieldGeneratorDeactivated[3];
+ case DATA_CANSTARTPHASE3:
+ if (ShieldGeneratorDeactivated[0] && ShieldGeneratorDeactivated[1] && ShieldGeneratorDeactivated[2] && ShieldGeneratorDeactivated[3])
+ return 1;
+ break;
+ case DATA_STRANGE_POOL:
+ return StrangePool;
+ case DATA_WATER:
+ return Water;
+ default:
+ break;
+ }
+
+ return 0;
}
- return 0;
- }
- std::string GetSaveData()
- {
- OUT_SAVE_INST_DATA;
- std::ostringstream stream;
- stream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " "
- << 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)
+
+ std::string GetSaveData()
{
+ OUT_SAVE_INST_DATA;
+ std::ostringstream stream;
+ stream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " "
+ << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << TrashCount;
OUT_SAVE_INST_DATA_COMPLETE;
- return out;
+ return stream.str();
}
- return NULL;
- }
- void Load(const char* in)
- {
- if (!in)
+ void Load(const char* in)
{
- OUT_LOAD_INST_DATA_FAIL;
- return;
+ if (!in)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
+
+ OUT_LOAD_INST_DATA(in);
+ std::istringstream stream(in);
+ stream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3]
+ >> m_auiEncounter[4] >> m_auiEncounter[5] >> TrashCount;
+
+ 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.
+ m_auiEncounter[i] = NOT_STARTED;
+
+ OUT_LOAD_INST_DATA_COMPLETE;
}
- OUT_LOAD_INST_DATA(in);
- std::istringstream stream(in);
- stream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3]
- >> m_auiEncounter[4] >> m_auiEncounter[5] >> TrashCount;
- 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.
- m_auiEncounter[i] = NOT_STARTED;
- 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);
+ }
};
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h
index 953e1f48eea..a725407b14e 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h
@@ -18,42 +18,42 @@
#ifndef DEF_SERPENT_SHRINE_H
#define DEF_SERPENT_SHRINE_H
-enum LurkerEventState
-{
- LURKER_NOT_STARTED = 0,
- LURKER_FISHING = 1,
- LURKER_HOOKED = 2
-};
+
enum WaterEventState
{
WATERSTATE_NONE = 0,
WATERSTATE_FRENZY = 1,
WATERSTATE_SCALDING = 2
};
-#define DATA_CANSTARTPHASE3 1
-#define DATA_CARIBDIS 2
-#define DATA_HYDROSSTHEUNSTABLEEVENT 3
-#define DATA_KARATHRESS 4
-#define DATA_KARATHRESSEVENT 5
-#define DATA_KARATHRESSEVENT_STARTER 6
-#define DATA_LADYVASHJ 7
-#define DATA_LADYVASHJEVENT 8
-#define DATA_LEOTHERASTHEBLINDEVENT 9
-#define DATA_MOROGRIMTIDEWALKEREVENT 10
-#define DATA_SHARKKIS 11
-#define DATA_SHIELDGENERATOR1 12
-#define DATA_SHIELDGENERATOR2 13
-#define DATA_SHIELDGENERATOR3 14
-#define DATA_SHIELDGENERATOR4 15
-#define DATA_THELURKERBELOW 16
-#define DATA_THELURKERBELOWEVENT 17
-#define DATA_TIDALVESS 18
-#define DATA_FATHOMLORDKARATHRESSEVENT 19
-#define DATA_LEOTHERAS 20
-#define DATA_LEOTHERAS_EVENT_STARTER 21
-#define DATA_CONTROL_CONSOLE 22
-#define DATA_STRANGE_POOL 23
-#define DATA_WATER 24
-#define DATA_TRASH 25
+
+enum DataTypes
+{
+ DATA_CANSTARTPHASE3 = 1,
+ DATA_CARIBDIS = 2,
+ DATA_HYDROSSTHEUNSTABLEEVENT = 3,
+ DATA_KARATHRESS = 4,
+ DATA_KARATHRESSEVENT = 5,
+ DATA_KARATHRESSEVENT_STARTER = 6,
+ DATA_LADYVASHJ = 7,
+ DATA_LADYVASHJEVENT = 8,
+ DATA_LEOTHERASTHEBLINDEVENT = 9,
+ DATA_MOROGRIMTIDEWALKEREVENT = 10,
+ DATA_SHARKKIS = 11,
+ DATA_SHIELDGENERATOR1 = 12,
+ DATA_SHIELDGENERATOR2 = 13,
+ DATA_SHIELDGENERATOR3 = 14,
+ DATA_SHIELDGENERATOR4 = 15,
+ DATA_THELURKERBELOW = 16,
+ DATA_THELURKERBELOWEVENT = 17,
+ DATA_TIDALVESS = 18,
+ DATA_FATHOMLORDKARATHRESSEVENT = 19,
+ DATA_LEOTHERAS = 20,
+ DATA_LEOTHERAS_EVENT_STARTER = 21,
+ DATA_CONTROL_CONSOLE = 22,
+ DATA_STRANGE_POOL = 23,
+ DATA_WATER = 24,
+ DATA_TRASH = 25,
+};
+
#endif