diff options
author | ModoX <moardox@gmail.com> | 2024-02-24 18:44:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-24 18:44:42 +0100 |
commit | f6646739908215311f110842ed41055a54dae1f0 (patch) | |
tree | 16173a0b713d9cc2ca7397aafb9bc528197524db /src/server | |
parent | cf026aa62747dfa0528a70badef69fcf33cbf8ba (diff) |
Core/PacketIO: Implemented CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID and SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID (#29626)
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/game/Handlers/AdventureMapHandler.cpp | 30 | ||||
-rw-r--r-- | src/server/game/Server/Packets/AdventureMapPackets.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Server/Packets/AdventureMapPackets.h | 21 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 2 |
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 |