aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWyrserth <43747507+Wyrserth@users.noreply.github.com>2019-06-16 19:46:00 +0200
committerGiacomo Pozzoni <giacomopoz@gmail.com>2019-06-16 19:46:00 +0200
commit14c2bdc5dac81f5f2b76d78b09c1224dbebcd8bc (patch)
treef40267497439a0777d971f8d511a2f7e4f9bdf2f
parentd50be8e020c235617cae6d85e214794c164a73c9 (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.cpp2
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp14
-rw-r--r--src/server/game/DungeonFinding/LFGPlayerData.cpp12
-rw-r--r--src/server/game/DungeonFinding/LFGPlayerData.h7
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