diff --git a/Source/Game/DungeonFinding/LFGManager.cs b/Source/Game/DungeonFinding/LFGManager.cs index 52a409aec..a107477a9 100644 --- a/Source/Game/DungeonFinding/LFGManager.cs +++ b/Source/Game/DungeonFinding/LFGManager.cs @@ -22,11 +22,11 @@ using Game.DataStorage; using Game.Entities; using Game.Groups; using Game.Maps; +using Game.Networking.Packets; using System; using System.Collections.Generic; using System.Linq; using System.Text; -using Game.Networking.Packets; namespace Game.DungeonFinding { @@ -1052,6 +1052,15 @@ namespace Game.DungeonFinding break; } + // Store the number of players that were present in group when joining RFD, used for achievement purposes + Player _player = Global.ObjAccessor.FindConnectedPlayer(pguid); + if (_player != null) + { + Group group = _player.GetGroup(); + if (group != null) + PlayersStore[pguid].SetNumberOfPartyMembersAtJoin((byte)group.GetMembersCount()); + } + SetState(pguid, LfgState.Dungeon); } @@ -1374,7 +1383,15 @@ namespace Game.DungeonFinding // Update achievements if (dungeon.difficulty == Difficulty.Heroic) - player.UpdateCriteria(CriteriaType.CompletedLFGDungeonWithStrangers, 1); + { + byte lfdRandomPlayers = 0; + byte numParty = PlayersStore[guid].GetNumberOfPartyMembersAtJoin(); + if (numParty != 0) + lfdRandomPlayers = (byte)(5 - numParty); + else + lfdRandomPlayers = 4; + player.UpdateCriteria(CriteriaType.CompletedLFGDungeonWithStrangers, lfdRandomPlayers); + } LfgReward reward = GetRandomDungeonReward(rDungeonId, player.GetLevel()); if (reward == null) diff --git a/Source/Game/DungeonFinding/LFGPlayerData.cs b/Source/Game/DungeonFinding/LFGPlayerData.cs index 8b0b199a0..960975219 100644 --- a/Source/Game/DungeonFinding/LFGPlayerData.cs +++ b/Source/Game/DungeonFinding/LFGPlayerData.cs @@ -116,6 +116,16 @@ namespace Game.DungeonFinding return m_SelectedDungeons; } + public void SetNumberOfPartyMembersAtJoin(byte count) + { + m_NumberOfPartyMembersAtJoin = count; + } + + public byte GetNumberOfPartyMembersAtJoin() + { + return m_NumberOfPartyMembersAtJoin; + } + // General RideTicket m_Ticket; LfgState m_State; @@ -127,5 +137,8 @@ namespace Game.DungeonFinding // Queue LfgRoles m_Roles; List m_SelectedDungeons = new(); + + // Achievement-related + byte m_NumberOfPartyMembersAtJoin; } }