Core/Groups: Fixes groups staying linked with players.

This commit is contained in:
Hondacrx
2025-09-02 22:43:56 -04:00
parent 6531cd9dc1
commit 3d23a9f162
34 changed files with 385 additions and 402 deletions
+16 -22
View File
@@ -86,7 +86,7 @@ namespace Game
GroupJoinBattlegroundResult err = GroupJoinBattlegroundResult.None;
Group grp = _player.GetGroup();
Group group = _player.GetGroup();
Team getQueueTeam()
{
@@ -105,7 +105,7 @@ namespace Game
BattlefieldStatusFailed battlefieldStatusFailed;
// check queue conditions
if (grp == null)
if (group == null)
{
if (GetPlayer().IsUsingLfg())
{
@@ -177,12 +177,12 @@ namespace Game
}
else
{
if (grp.GetLeaderGUID() != GetPlayer().GetGUID())
if (group.GetLeaderGUID() != GetPlayer().GetGUID())
return;
ObjectGuid errorGuid;
err = grp.CanJoinBattlegroundQueue(bgTemplate, bgQueueTypeId, 0, bgTemplate.GetMaxPlayersPerTeam(), false, 0, out errorGuid);
isPremade = (grp.GetMembersCount() >= bgTemplate.GetMinPlayersPerTeam());
err = group.CanJoinBattlegroundQueue(bgTemplate, bgQueueTypeId, 0, bgTemplate.GetMaxPlayersPerTeam(), false, 0, out errorGuid);
isPremade = (group.GetMembersCount() >= bgTemplate.GetMinPlayersPerTeam());
BattlegroundQueue bgQueue = Global.BattlegroundMgr.GetBattlegroundQueue(bgQueueTypeId);
GroupQueueInfo ginfo = null;
@@ -191,16 +191,13 @@ namespace Game
if (err == 0)
{
Log.outDebug(LogFilter.Battleground, "Battleground: the following players are joining as group:");
ginfo = bgQueue.AddGroup(GetPlayer(), grp, getQueueTeam(), bracketEntry, isPremade, 0, 0);
ginfo = bgQueue.AddGroup(GetPlayer(), group, getQueueTeam(), bracketEntry, isPremade, 0, 0);
avgTime = bgQueue.GetAverageQueueWaitTime(ginfo, bracketEntry.GetBracketId());
}
for (GroupReference refe = grp.GetFirstMember(); refe != null; refe = refe.Next())
foreach (GroupReference groupRef in group.GetMembers())
{
Player member = refe.GetSource();
if (member == null)
continue; // this should never happen
Player member = groupRef.GetSource();
if (err != 0)
{
BattlefieldStatusFailed battlefieldStatus;
@@ -510,11 +507,11 @@ namespace Game
if (bracketEntry == null)
return;
Group grp = GetPlayer().GetGroup();
Group group = GetPlayer().GetGroup();
// no group found, error
if (grp == null)
if (group == null)
return;
if (grp.GetLeaderGUID() != GetPlayer().GetGUID())
if (group.GetLeaderGUID() != GetPlayer().GetGUID())
return;
uint ateamId = GetPlayer().GetArenaTeamId(packet.TeamSizeIndex);
@@ -525,7 +522,7 @@ namespace Game
// get the team rating for queuing
uint arenaRating = at.GetRating();
uint matchmakerRating = at.GetAverageMMR(grp);
uint matchmakerRating = at.GetAverageMMR(group);
// the arenateam id must match for everyone in the group
if (arenaRating <= 0)
@@ -537,21 +534,18 @@ namespace Game
GroupQueueInfo ginfo = null;
ObjectGuid errorGuid;
var err = grp.CanJoinBattlegroundQueue(bgTemplate, bgQueueTypeId, (uint)arenatype, (uint)arenatype, true, packet.TeamSizeIndex, out errorGuid);
var err = group.CanJoinBattlegroundQueue(bgTemplate, bgQueueTypeId, (uint)arenatype, (uint)arenatype, true, packet.TeamSizeIndex, out errorGuid);
if (err == 0)
{
Log.outDebug(LogFilter.Battleground, "Battleground: arena team id {0}, leader {1} queued with matchmaker rating {2} for type {3}", GetPlayer().GetArenaTeamId(packet.TeamSizeIndex), GetPlayer().GetName(), matchmakerRating, arenatype);
ginfo = bgQueue.AddGroup(GetPlayer(), grp, _player.GetTeam(), bracketEntry, false, arenaRating, matchmakerRating, ateamId);
ginfo = bgQueue.AddGroup(GetPlayer(), group, _player.GetTeam(), bracketEntry, false, arenaRating, matchmakerRating, ateamId);
avgTime = bgQueue.GetAverageQueueWaitTime(ginfo, bracketEntry.GetBracketId());
}
for (GroupReference refe = grp.GetFirstMember(); refe != null; refe = refe.Next())
foreach (GroupReference groupRef in group.GetMembers())
{
Player member = refe.GetSource();
if (member == null)
continue;
Player member = groupRef.GetSource();
if (err != 0)
{
BattlefieldStatusFailed battlefieldStatus;
+5 -5
View File
@@ -158,7 +158,7 @@ namespace Game
if (group == null)
return;
if (packet.PartyIndex != 0 && group.GetGroupCategory() != (GroupCategory)packet.PartyIndex)
if (packet.PartyIndex.HasValue && group.GetGroupCategory() != (GroupCategory)packet.PartyIndex)
return;
if (packet.Accept)
@@ -702,9 +702,9 @@ namespace Game
broadcastPingUnit.SpellOverrideNameID = pingUnit.SpellOverrideNameID;
broadcastPingUnit.Write();
for (GroupReference itr = group.GetFirstMember(); itr != null; itr = itr.Next())
foreach (GroupReference groupRef in group.GetMembers())
{
Player member = itr.GetSource();
Player member = groupRef.GetSource();
if (_player == member || !_player.IsInMap(member))
continue;
@@ -732,9 +732,9 @@ namespace Game
broadcastPingWorldPoint.PingDuration = pingWorldPoint.PingDuration;
broadcastPingWorldPoint.Write();
for (GroupReference itr = group.GetFirstMember(); itr != null; itr = itr.Next())
foreach (GroupReference groupRef in group.GetMembers())
{
Player member = itr.GetSource();
Player member = groupRef.GetSource();
if (_player == member || !_player.IsInMap(member))
continue;
+2 -5
View File
@@ -205,12 +205,9 @@ namespace Game
LfgPartyInfo lfgPartyInfo = new();
// Get the Locked dungeons of the other party members
for (GroupReference refe = group.GetFirstMember(); refe != null; refe = refe.Next())
foreach (GroupReference groupRef in group.GetMembers())
{
Player plrg = refe.GetSource();
if (plrg == null)
continue;
Player plrg = groupRef.GetSource();
ObjectGuid pguid = plrg.GetGUID();
if (pguid == guid)
continue;
+2 -5
View File
@@ -99,12 +99,9 @@ namespace Game
Group group = player.GetGroup();
List<Player> playersNear = new();
for (GroupReference refe = group.GetFirstMember(); refe != null; refe = refe.Next())
foreach (GroupReference groupRef in group.GetMembers())
{
Player member = refe.GetSource();
if (member == null)
continue;
Player member = groupRef.GetSource();
if (!loot.HasAllowedLooter(member.GetGUID()))
continue;
+6 -8
View File
@@ -126,11 +126,10 @@ namespace Game
var group = _player.GetGroup();
if (group != null)
{
for (GroupReference refe = group.GetFirstMember(); refe != null; refe = refe.Next())
foreach (GroupReference groupRef in group.GetMembers())
{
Player player = refe.GetSource();
if (player == null || player == _player || !player.IsInMap(_player)) // not self and in same map
Player player = groupRef.GetSource();
if (player == _player || !player.IsInMap(_player)) // not self and in same map
continue;
if (player.CanTakeQuest(quest, true))
@@ -551,11 +550,10 @@ namespace Game
return;
}
for (GroupReference refe = group.GetFirstMember(); refe != null; refe = refe.Next())
foreach (GroupReference groupRef in group.GetMembers())
{
Player receiver = refe.GetSource();
if (receiver == null || receiver == sender)
Player receiver = groupRef.GetSource();
if (receiver == sender)
continue;
if (!receiver.GetPlayerSharingQuest().IsEmpty())