diff options
author | ModoX <moardox@gmail.com> | 2022-02-26 23:07:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-26 23:07:43 +0100 |
commit | 8de5053a655a59cc1d38b1e1de59950ab32629cf (patch) | |
tree | 8ee0bf38877a31e5cd57125add4ec03dcde88d25 | |
parent | 6c01f761b2c00d9ea8d44f2856c7a82cadb9bbfc (diff) |
Core/Quests: Fixes response selection to use correct referenced identifier (#27808)
-rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 7 | ||||
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.h | 2 |
4 files changed, 12 insertions, 5 deletions
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 5aa7bed0eda..07ee9996ecb 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -946,6 +946,13 @@ struct PlayerChoice [responseId](PlayerChoiceResponse const& playerChoiceResponse) { return playerChoiceResponse.ResponseId == responseId; }); return itr != Responses.end() ? &(*itr) : nullptr; } + + PlayerChoiceResponse const* GetResponseByIdentifier(int32 responseIdentifier) const + { + auto itr = std::find_if(Responses.begin(), Responses.end(), + [responseIdentifier](PlayerChoiceResponse const& playerChoiceResponse) { return playerChoiceResponse.ResponseIdentifier == responseIdentifier; }); + return itr != Responses.end() ? &(*itr) : nullptr; + } }; enum SkillRangeType diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index c48837bee41..5c108c6e42a 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -818,15 +818,15 @@ void WorldSession::HandlePlayerChoiceResponse(WorldPackets::Quest::ChoiceRespons if (!playerChoice) return; - PlayerChoiceResponse const* playerChoiceResponse = playerChoice->GetResponse(choiceResponse.ResponseID); + PlayerChoiceResponse const* playerChoiceResponse = playerChoice->GetResponseByIdentifier(choiceResponse.ResponseIdentifier); if (!playerChoiceResponse) { TC_LOG_ERROR("entities.player.cheat", "Error in CMSG_CHOICE_RESPONSE: %s tried to select invalid player choice response %d (possible packet-hacking detected)", - GetPlayerInfo().c_str(), choiceResponse.ResponseID); + GetPlayerInfo().c_str(), choiceResponse.ResponseIdentifier); return; } - sScriptMgr->OnPlayerChoiceResponse(GetPlayer(), choiceResponse.ChoiceID, choiceResponse.ResponseID); + sScriptMgr->OnPlayerChoiceResponse(GetPlayer(), choiceResponse.ChoiceID, choiceResponse.ResponseIdentifier); if (playerChoiceResponse->Reward) { diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 955c792faff..76d803dbf17 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -769,7 +769,7 @@ WorldPacket const* DisplayPlayerChoice::Write() void ChoiceResponse::Read() { _worldPacket >> ChoiceID; - _worldPacket >> ResponseID; + _worldPacket >> ResponseIdentifier; IsReroll = _worldPacket.ReadBit(); } } diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 69580d036b8..630cb3880cc 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -737,7 +737,7 @@ namespace WorldPackets void Read() override; int32 ChoiceID = 0; - int32 ResponseID = 0; + int32 ResponseIdentifier = 0; bool IsReroll = false; }; } |