aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Handlers/AdventureMapHandler.cpp30
-rw-r--r--src/server/game/Server/Packets/AdventureMapPackets.cpp14
-rw-r--r--src/server/game/Server/Packets/AdventureMapPackets.h21
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
-rw-r--r--src/server/game/Server/WorldSession.h2
5 files changed, 69 insertions, 2 deletions
diff --git a/src/server/game/Handlers/AdventureMapHandler.cpp b/src/server/game/Handlers/AdventureMapHandler.cpp
index d25651e8ce0..4d2ae827613 100644
--- a/src/server/game/Handlers/AdventureMapHandler.cpp
+++ b/src/server/game/Handlers/AdventureMapHandler.cpp
@@ -21,6 +21,36 @@
#include "ObjectMgr.h"
#include "Player.h"
+void WorldSession::HandleCheckIsAdventureMapPoiValid(WorldPackets::AdventureMap::CheckIsAdventureMapPoiValid& checkIsAdventureMapPoiValid)
+{
+ AdventureMapPOIEntry const* entry = sAdventureMapPOIStore.LookupEntry(checkIsAdventureMapPoiValid.AdventureMapPoiID);
+ if (!entry)
+ return;
+
+ auto sendIsPoiValid = [this](uint32 adventureMapPoiId, bool isVisible) -> void
+ {
+ WorldPackets::AdventureMap::PlayerIsAdventureMapPoiValid isMapPoiValid;
+ isMapPoiValid.AdventureMapPoiID = adventureMapPoiId;
+ isMapPoiValid.IsVisible = isVisible;
+ SendPacket(isMapPoiValid.Write());
+ };
+
+ Quest const* quest = sObjectMgr->GetQuestTemplate(entry->QuestID);
+ if (!quest)
+ {
+ sendIsPoiValid(entry->ID, false);
+ return;
+ }
+
+ if (!_player->MeetPlayerCondition(entry->PlayerConditionID))
+ {
+ sendIsPoiValid(entry->ID, false);
+ return;
+ }
+
+ sendIsPoiValid(entry->ID, true);
+}
+
void WorldSession::HandleAdventureMapStartQuest(WorldPackets::AdventureMap::AdventureMapStartQuest& startQuest)
{
Quest const* quest = sObjectMgr->GetQuestTemplate(startQuest.QuestID);
diff --git a/src/server/game/Server/Packets/AdventureMapPackets.cpp b/src/server/game/Server/Packets/AdventureMapPackets.cpp
index 1058aabf209..01c1867f492 100644
--- a/src/server/game/Server/Packets/AdventureMapPackets.cpp
+++ b/src/server/game/Server/Packets/AdventureMapPackets.cpp
@@ -21,6 +21,20 @@ namespace WorldPackets
{
namespace AdventureMap
{
+void CheckIsAdventureMapPoiValid::Read()
+{
+ _worldPacket >> AdventureMapPoiID;
+}
+
+WorldPacket const* PlayerIsAdventureMapPoiValid::Write()
+{
+ _worldPacket << AdventureMapPoiID;
+ _worldPacket.WriteBit(IsVisible);
+ _worldPacket.FlushBits();
+
+ return &_worldPacket;
+}
+
void AdventureMapStartQuest::Read()
{
_worldPacket >> QuestID;
diff --git a/src/server/game/Server/Packets/AdventureMapPackets.h b/src/server/game/Server/Packets/AdventureMapPackets.h
index 39dc41d023a..e5226f6aa4e 100644
--- a/src/server/game/Server/Packets/AdventureMapPackets.h
+++ b/src/server/game/Server/Packets/AdventureMapPackets.h
@@ -24,6 +24,27 @@ namespace WorldPackets
{
namespace AdventureMap
{
+ class CheckIsAdventureMapPoiValid final : public ClientPacket
+ {
+ public:
+ CheckIsAdventureMapPoiValid(WorldPacket&& packet) : ClientPacket(CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID, std::move(packet)) { }
+
+ void Read() override;
+
+ uint32 AdventureMapPoiID = 0;
+ };
+
+ class PlayerIsAdventureMapPoiValid final : public ServerPacket
+ {
+ public:
+ PlayerIsAdventureMapPoiValid() : ServerPacket(SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID) { }
+
+ WorldPacket const* Write() override;
+
+ int32 AdventureMapPoiID = 0;
+ bool IsVisible = false;
+ };
+
class AdventureMapStartQuest final : public ClientPacket
{
public:
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 4cedaa7aaab..acc39b92863 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -324,7 +324,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_CHAT_REPORT_IGNORED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatIgnoredOpcode);
DEFINE_HANDLER(CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUnregisterAllAddonPrefixesOpcode);
DEFINE_HANDLER(CMSG_CHECK_CHARACTER_NAME_AVAILABILITY, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCheckCharacterNameAvailability);
- DEFINE_HANDLER(CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCheckIsAdventureMapPoiValid);
DEFINE_HANDLER(CMSG_CHOICE_RESPONSE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandlePlayerChoiceResponse);
DEFINE_HANDLER(CMSG_CHROMIE_TIME_SELECT_EXPANSION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CLAIM_WEEKLY_REWARD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -1828,7 +1828,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_CHOICE_DISPLAY_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_CONDITION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_HIDE_ARROW_CALLOUT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SAVE_GUILD_EMBLEM, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SAVE_PERSONAL_EMBLEM, STATUS_NEVER, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 5b7257367f2..e7b63f99464 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -111,6 +111,7 @@ namespace WorldPackets
namespace AdventureMap
{
+ class CheckIsAdventureMapPoiValid;
class AdventureMapStartQuest;
}
@@ -1759,6 +1760,7 @@ class TC_GAME_API WorldSession
void HandleAdventureJournalUpdateSuggestions(WorldPackets::AdventureJournal::AdventureJournalUpdateSuggestions& updateSuggestions);
// Adventure Map
+ void HandleCheckIsAdventureMapPoiValid(WorldPackets::AdventureMap::CheckIsAdventureMapPoiValid& CheckIsAdventureMapPoiValid);
void HandleAdventureMapStartQuest(WorldPackets::AdventureMap::AdventureMapStartQuest& startQuest);
// Toys