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.
This commit is contained in:
Wyrserth
2019-06-16 19:46:00 +02:00
committed by Giacomo Pozzoni
parent d50be8e020
commit 14c2bdc5da
4 changed files with 32 additions and 3 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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