diff options
author | Intel <chemicstry@gmail.com> | 2014-12-29 22:46:00 +0200 |
---|---|---|
committer | Intel <chemicstry@gmail.com> | 2014-12-29 22:46:51 +0200 |
commit | 8176f9982e04920dacf2094803a8ea737b0a3019 (patch) | |
tree | ae4e169c1e60c98c1d7345bb8f6525f4fbcd8e06 /src | |
parent | 8be25ce908912a1431a15a022503911e2afa5fe2 (diff) |
Core/Quests: Added CMSG_QUESTGIVER_REQUEST_REWARD
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 24 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.h | 11 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.h | 2 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 |
6 files changed, 31 insertions, 17 deletions
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 08345bc59d7..bed1cc72f66 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -340,30 +340,26 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::Quest _player->PlayerTalkClass->SendQuestGiverOfferReward(quest, packet.QuestGiverGUID, true); } -void WorldSession::HandleQuestgiverRequestRewardOpcode(WorldPacket& recvData) +void WorldSession::HandleQuestgiverRequestRewardOpcode(WorldPackets::Quest::QuestGiverRequestReward& packet) { - uint32 questId; - ObjectGuid guid; - recvData >> guid >> questId; + TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_REQUEST_REWARD npc = %s, quest = %u", packet.QuestGiverGUID.ToString().c_str(), packet.QuestID); - TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_REQUEST_REWARD npc = %s, quest = %u", guid.ToString().c_str(), questId); - - Object* object = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT); - if (!object || !object->hasInvolvedQuest(questId)) + Object* object = ObjectAccessor::GetObjectByTypeMask(*_player, packet.QuestGiverGUID, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT); + if (!object || !object->hasInvolvedQuest(packet.QuestID)) return; // some kind of WPE protection if (!_player->CanInteractWithQuestGiver(object)) return; - if (_player->CanCompleteQuest(questId)) - _player->CompleteQuest(questId); + if (_player->CanCompleteQuest(packet.QuestID)) + _player->CompleteQuest(packet.QuestID); - if (_player->GetQuestStatus(questId) != QUEST_STATUS_COMPLETE) + if (_player->GetQuestStatus(packet.QuestID) != QUEST_STATUS_COMPLETE) return; - if (Quest const* quest = sObjectMgr->GetQuestTemplate(questId)) - _player->PlayerTalkClass->SendQuestGiverOfferReward(quest, guid, true); + if (Quest const* quest = sObjectMgr->GetQuestTemplate(packet.QuestID)) + _player->PlayerTalkClass->SendQuestGiverOfferReward(quest, packet.QuestGiverGUID, true); } void WorldSession::HandleQuestgiverCancel(WorldPacket& /*recvData*/) @@ -455,7 +451,7 @@ void WorldSession::HandleQuestConfirmAccept(WorldPacket& recvData) if (!_player->IsInSameRaidWith(originalPlayer)) return; - if (!!originalPlayer->CanShareQuest(questId)) + if (!originalPlayer->CanShareQuest(questId)) return; if (!_player->CanTakeQuest(quest, true)) diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 5003b49dc2f..8eb2a498b11 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -413,3 +413,9 @@ WorldPacket const* WorldPackets::Quest::QuestGiverRequestItems::Write() return &_worldPacket; } + +void WorldPackets::Quest::QuestGiverRequestReward::Read() +{ + _worldPacket >> QuestGiverGUID; + _worldPacket >> QuestID; +} diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 2d42d5990f7..a92e4d02c56 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -382,6 +382,17 @@ namespace WorldPackets std::string QuestTitle; std::string CompletionText; }; + + class QuestGiverRequestReward final : public ClientPacket + { + public: + QuestGiverRequestReward(WorldPacket&& packet) : ClientPacket(CMSG_QUESTGIVER_REQUEST_REWARD, std::move(packet)) { } + + void Read() override; + + ObjectGuid QuestGiverGUID; + int32 QuestID = 0; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index cbc98dbef3c..768d312a406 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -543,7 +543,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_QUESTGIVER_COMPLETE_QUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverCompleteQuest, &WorldSession::HandleQuestgiverCompleteQuest); DEFINE_HANDLER(CMSG_QUESTGIVER_HELLO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverHello, &WorldSession::HandleQuestgiverHelloOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_QUESTGIVER_QUERY_QUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestgiverQueryQuestOpcode); - DEFINE_OPCODE_HANDLER_OLD(CMSG_QUESTGIVER_REQUEST_REWARD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestgiverRequestRewardOpcode); + DEFINE_HANDLER(CMSG_QUESTGIVER_REQUEST_REWARD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverRequestReward, &WorldSession::HandleQuestgiverRequestRewardOpcode); DEFINE_HANDLER(CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverStatusMultipleQuery, &WorldSession::HandleQuestgiverStatusMultipleQuery); DEFINE_HANDLER(CMSG_QUESTGIVER_STATUS_QUERY, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Quest::QuestGiverStatusQuery, &WorldSession::HandleQuestgiverStatusQueryOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_QUESTLOG_REMOVE_QUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestLogRemoveQuest ); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 4c84d7b47f4..a06bf99d040 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -487,7 +487,7 @@ enum OpcodeClient : uint32 CMSG_QUESTGIVER_HELLO = 0x058E, CMSG_QUESTGIVER_QUERY_QUEST = 0x1924, CMSG_QUESTGIVER_QUEST_AUTOLAUNCH = 0xBADD, - CMSG_QUESTGIVER_REQUEST_REWARD = 0xBADD, + CMSG_QUESTGIVER_REQUEST_REWARD = 0x022E, CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY = 0x0131, CMSG_QUESTGIVER_STATUS_QUERY = 0x01E2, CMSG_QUESTLOG_REMOVE_QUEST = 0xBADD, diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 55b4a13e99f..12975857d9b 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -196,6 +196,7 @@ namespace WorldPackets class QueryQuestInfo; class QuestGiverChooseReward; class QuestGiverCompleteQuest; + class QuestGiverRequestReward; } namespace Spells @@ -914,7 +915,7 @@ class WorldSession void HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvPacket); void HandleQuestgiverQueryQuestOpcode(WorldPacket& recvPacket); void HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::QuestGiverChooseReward& packet); - void HandleQuestgiverRequestRewardOpcode(WorldPacket& recvPacket); + void HandleQuestgiverRequestRewardOpcode(WorldPackets::Quest::QuestGiverRequestReward& packet); void HandleQuestQueryOpcode(WorldPackets::Quest::QueryQuestInfo& packet); void HandleQuestgiverCancel(WorldPacket& recvData); void HandleQuestLogSwapQuest(WorldPacket& recvData); |