diff options
author | Wyrserth <43747507+Wyrserth@users.noreply.github.com> | 2019-06-16 19:46:00 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-11 14:12:54 +0100 |
commit | 01be9f44af0687f03c34f0221dc285ec22803969 (patch) | |
tree | ba6d83249a488b076dd969b75261a61ae57839a1 /src | |
parent | 3278f87789b8357ce888ab61026c0ca6daa8e6cb (diff) |
Core/RDF: fix counting issue with the achievement Looking for More (and similar) (#23418)
* Core/RDF: allow the achievement Looking for More (and similar) to increase the counter based on how many random players were picked.
* Use getter/setter instead.
(cherry picked from commit 14c2bdc5dac81f5f2b76d78b09c1224dbebcd8bc)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.cpp | 14 | ||||
-rw-r--r-- | src/server/game/DungeonFinding/LFGPlayerData.cpp | 12 | ||||
-rw-r--r-- | src/server/game/DungeonFinding/LFGPlayerData.h | 7 |
3 files changed, 31 insertions, 2 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 16277601b74..0d25ca0a569 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -1107,6 +1107,11 @@ void LFGMgr::UpdateProposal(uint32 proposalId, ObjectGuid guid, bool accept) break; } + // Store the number of players that were present in group when joining RFD, used for achievement purposes + if (Player* player = ObjectAccessor::FindConnectedPlayer(pguid)) + if (Group* group = player->GetGroup()) + PlayersStore[pguid].SetNumberOfPartyMembersAtJoin(group->GetMembersCount()); + SetState(pguid, LFG_STATE_DUNGEON); } @@ -1476,7 +1481,14 @@ void LFGMgr::FinishDungeon(ObjectGuid gguid, const uint32 dungeonId, Map const* // Update achievements if (dungeon->difficulty == DIFFICULTY_HEROIC) - player->UpdateCriteria(CriteriaType::CompletedLFGDungeonWithStrangers, 1); + { + uint8 lfdRandomPlayers = 0; + if (uint8 numParty = PlayersStore[guid].GetNumberOfPartyMembersAtJoin()) + lfdRandomPlayers = 5 - numParty; + else + lfdRandomPlayers = 4; + player->UpdateCriteria(CriteriaType::CompletedLFGDungeonWithStrangers, lfdRandomPlayers); + } LfgReward const* reward = GetRandomDungeonReward(rDungeonId, player->getLevel()); if (!reward) diff --git a/src/server/game/DungeonFinding/LFGPlayerData.cpp b/src/server/game/DungeonFinding/LFGPlayerData.cpp index 6d8612ed9fc..18488f2890a 100644 --- a/src/server/game/DungeonFinding/LFGPlayerData.cpp +++ b/src/server/game/DungeonFinding/LFGPlayerData.cpp @@ -21,7 +21,7 @@ namespace lfg { LfgPlayerData::LfgPlayerData(): m_State(LFG_STATE_NONE), m_OldState(LFG_STATE_NONE), - m_Team(0), m_Group(), m_Roles(0) + m_Team(0), m_Group(), m_Roles(0), m_NumberOfPartyMembersAtJoin(0) { } LfgPlayerData::~LfgPlayerData() { } @@ -113,4 +113,14 @@ LfgDungeonSet const& LfgPlayerData::GetSelectedDungeons() const return m_SelectedDungeons; } +void LfgPlayerData::SetNumberOfPartyMembersAtJoin(uint8 count) +{ + m_NumberOfPartyMembersAtJoin = count; +} + +uint8 LfgPlayerData::GetNumberOfPartyMembersAtJoin() +{ + return m_NumberOfPartyMembersAtJoin; +} + } // namespace lfg diff --git a/src/server/game/DungeonFinding/LFGPlayerData.h b/src/server/game/DungeonFinding/LFGPlayerData.h index 5c8ad907dfe..95603b16180 100644 --- a/src/server/game/DungeonFinding/LFGPlayerData.h +++ b/src/server/game/DungeonFinding/LFGPlayerData.h @@ -55,6 +55,10 @@ class TC_GAME_API LfgPlayerData uint8 GetRoles() const; LfgDungeonSet const& GetSelectedDungeons() const; + // Achievement-related + void SetNumberOfPartyMembersAtJoin(uint8 count); + uint8 GetNumberOfPartyMembersAtJoin(); + private: // General WorldPackets::LFG::RideTicket m_Ticket; ///< Join ticket @@ -67,6 +71,9 @@ class TC_GAME_API LfgPlayerData // Queue uint8 m_Roles; ///< Roles the player selected when joined LFG LfgDungeonSet m_SelectedDungeons; ///< Selected Dungeons when joined LFG + + // Achievement-related + uint8 m_NumberOfPartyMembersAtJoin; }; } // namespace lfg |