aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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
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