Fix: SetTeam logic - Replace or add teams based on TeamNumber (#55)

This commit is contained in:
fxz2018
2025-09-25 21:14:00 +08:00
committed by GitHub
parent de1b4081b2
commit 71be17a043

View File

@@ -20,11 +20,57 @@ namespace EpinelPS.LobbyServer.Team
// Add team data to user data // Add team data to user data
NetUserTeamData teamData = new() { LastContentsTeamNumber = req.ContentsId + 1, Type = req.Type }; NetUserTeamData teamData = new() { LastContentsTeamNumber = req.ContentsId + 1, Type = req.Type };
teamData.Teams.AddRange(req.Teams);
// Check for existing teams with same TeamNumber and replace or add accordingly
foreach (var newTeam in req.Teams)
{
bool teamUpdated = false;
for (int i = 0; i < teamData.Teams.Count; i++)
{
if (teamData.Teams[i].TeamNumber == newTeam.TeamNumber)
{
// Replace existing team with same TeamNumber
teamData.Teams[i] = newTeam;
teamUpdated = true;
break;
}
}
if (!teamUpdated)
{
// Add new team if TeamNumber doesn't exist
teamData.Teams.Add(newTeam);
}
}
if (!user.UserTeams.TryAdd(req.Type, teamData)) if (!user.UserTeams.TryAdd(req.Type, teamData))
{ {
user.UserTeams[req.Type] = teamData; // If key already exists, we need to merge teams properly
var existingTeamData = user.UserTeams[req.Type];
existingTeamData.LastContentsTeamNumber = req.ContentsId + 1;
existingTeamData.Type = req.Type;
// Apply same logic to existing team data
foreach (var newTeam in req.Teams)
{
bool teamUpdated = false;
for (int i = 0; i < existingTeamData.Teams.Count; i++)
{
if (existingTeamData.Teams[i].TeamNumber == newTeam.TeamNumber)
{
// Replace existing team with same TeamNumber
existingTeamData.Teams[i] = newTeam;
teamUpdated = true;
break;
}
}
if (!teamUpdated)
{
// Add new team if TeamNumber doesn't exist
existingTeamData.Teams.Add(newTeam);
}
}
} }
JsonDb.Save(); JsonDb.Save();
@@ -32,4 +78,4 @@ namespace EpinelPS.LobbyServer.Team
await WriteDataAsync(response); await WriteDataAsync(response);
} }
} }
} }