diff options
author | Wyrserth <43747507+Wyrserth@users.noreply.github.com> | 2019-06-16 19:46:00 +0200 |
---|---|---|
committer | Giacomo Pozzoni <giacomopoz@gmail.com> | 2019-06-16 19:46:00 +0200 |
commit | 14c2bdc5dac81f5f2b76d78b09c1224dbebcd8bc (patch) | |
tree | f40267497439a0777d971f8d511a2f7e4f9bdf2f | |
parent | d50be8e020c235617cae6d85e214794c164a73c9 (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.
-rw-r--r-- | src/server/game/Achievements/AchievementMgr.cpp | 2 | ||||
-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 |
4 files changed, 32 insertions, 3 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 6daa0954411..902aec5faf5 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -834,7 +834,6 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui case ACHIEVEMENT_CRITERIA_TYPE_FLIGHT_PATHS_TAKEN: case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2: case ACHIEVEMENT_CRITERIA_TYPE_ACCEPTED_SUMMONINGS: - case ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS: SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE); break; // std case: increment at miscvalue1 @@ -850,6 +849,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui case ACHIEVEMENT_CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS: /* FIXME: for online player only currently */ case ACHIEVEMENT_CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED: case ACHIEVEMENT_CRITERIA_TYPE_TOTAL_HEALING_RECEIVED: + case ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS: SetCriteriaProgress(achievementCriteria, miscValue1, PROGRESS_ACCUMULATE); break; // std case: increment at miscvalue2 diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index b6863a6e95e..d26ccd5b106 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -1085,6 +1085,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); } @@ -1454,7 +1459,14 @@ void LFGMgr::FinishDungeon(ObjectGuid gguid, const uint32 dungeonId, Map const* // Update achievements if (dungeon->difficulty == DUNGEON_DIFFICULTY_HEROIC) - player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS, 1); + { + uint8 lfdRandomPlayers = 0; + if (uint8 numParty = PlayersStore[guid].GetNumberOfPartyMembersAtJoin()) + lfdRandomPlayers = 5 - numParty; + else + lfdRandomPlayers = 4; + player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS, 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 24054f31b61..32fd50d76b7 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_Comment("") + m_Team(0), m_Group(), m_Roles(0), m_Comment(""), m_NumberOfPartyMembersAtJoin(0) { } LfgPlayerData::~LfgPlayerData() { } @@ -114,4 +114,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 200989db5f3..5f62ffa7447 100644 --- a/src/server/game/DungeonFinding/LFGPlayerData.h +++ b/src/server/game/DungeonFinding/LFGPlayerData.h @@ -54,6 +54,10 @@ class TC_GAME_API LfgPlayerData std::string const& GetComment() const; LfgDungeonSet const& GetSelectedDungeons() const; + // Achievement-related + void SetNumberOfPartyMembersAtJoin(uint8 count); + uint8 GetNumberOfPartyMembersAtJoin(); + private: // General LfgState m_State; ///< State if group in LFG @@ -66,6 +70,9 @@ class TC_GAME_API LfgPlayerData uint8 m_Roles; ///< Roles the player selected when joined LFG std::string m_Comment; ///< Player comment used when joined LFG LfgDungeonSet m_SelectedDungeons; ///< Selected Dungeons when joined LFG + + // Achievement-related + uint8 m_NumberOfPartyMembersAtJoin; }; } // namespace lfg |