diff options
Diffstat (limited to 'src')
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 |