diff options
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 32 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.h | 12 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
5 files changed, 43 insertions, 17 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 6cbd3a22e3f..3a904a395d9 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -16257,25 +16257,27 @@ void Player::SendCanTakeQuestResponse(QuestFailedReason msg) const TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_QUEST_INVALID"); } -void Player::SendQuestConfirmAccept(const Quest* quest, Player* pReceiver) +void Player::SendQuestConfirmAccept(Quest const* quest, Player* receiver) { - if (pReceiver) - { - std::string strTitle = quest->GetLogTitle(); + if (!receiver) + return; - LocaleConstant localeConstant = pReceiver->GetSession()->GetSessionDbLocaleIndex(); - if (localeConstant >= 0) - if (QuestTemplateLocale const* questTemplateLocale = sObjectMgr->GetQuestLocale(quest->GetQuestId())) - ObjectMgr::GetLocaleString(questTemplateLocale->LogTitle, localeConstant, strTitle); + std::string questTitle = quest->GetLogTitle(); + uint32 questID = quest->GetQuestId(); - WorldPacket data(SMSG_QUEST_CONFIRM_ACCEPT, (4 + strTitle.size() + 8)); - data << uint32(quest->GetQuestId()); - data << strTitle; - data << GetGUID(); - pReceiver->GetSession()->SendPacket(&data); + LocaleConstant localeConstant = receiver->GetSession()->GetSessionDbLocaleIndex(); + if (localeConstant >= LOCALE_enUS) + if (QuestTemplateLocale const* questTemplateLocale = sObjectMgr->GetQuestLocale(questID)) + ObjectMgr::GetLocaleString(questTemplateLocale->LogTitle, localeConstant, questTitle); - TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUEST_CONFIRM_ACCEPT"); - } + WorldPackets::Quest::QuestConfirmAccept packet; + packet.QuestID = questID; + packet.InitiatedBy = GetGUID(); + packet.QuestTitle = questTitle; + + receiver->GetSession()->SendPacket(packet.Write()); + + TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUEST_CONFIRM_ACCEPT"); } void Player::SendPushToPartyResponse(Player* player, uint8 msg) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 1a650c509d6..1f7b2743705 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1714,7 +1714,7 @@ class Player : public Unit, public GridObject<Player> void SendQuestFailed(uint32 questId, InventoryResult reason = EQUIP_ERR_OK); void SendQuestTimerFailed(uint32 questId); void SendCanTakeQuestResponse(QuestFailedReason msg) const; - void SendQuestConfirmAccept(Quest const* quest, Player* pReceiver); + void SendQuestConfirmAccept(Quest const* quest, Player* receiver); void SendPushToPartyResponse(Player* player, uint8 msg); void SendQuestUpdateAddCredit(Quest const* quest, ObjectGuid guid, QuestObjective const& obj, uint16 count); void SendQuestUpdateAddPlayer(Quest const* quest, uint16 newCount, uint32 required); diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 577099be70b..14546c54d8c 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -469,3 +469,15 @@ WorldPacket const* WorldPackets::Quest::QuestUpdateComplete::Write() return &_worldPacket; } + +WorldPacket const* WorldPackets::Quest::QuestConfirmAccept::Write() +{ + _worldPacket << uint32(QuestID); + _worldPacket << InitiatedBy; + + _worldPacket.FlushBits(); + _worldPacket.WriteBits(QuestTitle.size(), 10); + _worldPacket.WriteString(QuestTitle); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 1409dc993f9..0943c482158 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -464,6 +464,18 @@ namespace WorldPackets int32 QuestID = 0; }; + + class QuestConfirmAccept final : public ServerPacket + { + public: + QuestConfirmAccept() : ServerPacket(SMSG_QUEST_CONFIRM_ACCEPT, 21) { } + + WorldPacket const* Write() override; + + ObjectGuid InitiatedBy; + int32 QuestID = 0; + std::string QuestTitle; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 0d3abbb5436..48cce355d0e 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1512,7 +1512,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_QUEST_INFO_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_TIME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_COMPLETION_NPC_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_CONFIRM_ACCEPT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_CONFIRM_ACCEPT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_FORCE_REMOVED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_INVALID_QUEST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_OFFER_REWARD_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM); |