From 71be17a0436d32bed4987c7f257fafc7e1189280 Mon Sep 17 00:00:00 2001 From: fxz2018 <49226236+fxz2018@users.noreply.github.com> Date: Thu, 25 Sep 2025 21:14:00 +0800 Subject: [PATCH] Fix: SetTeam logic - Replace or add teams based on TeamNumber (#55) --- EpinelPS/LobbyServer/Team/SetTeam.cs | 52 ++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/EpinelPS/LobbyServer/Team/SetTeam.cs b/EpinelPS/LobbyServer/Team/SetTeam.cs index 26fcd69..d7a3021 100644 --- a/EpinelPS/LobbyServer/Team/SetTeam.cs +++ b/EpinelPS/LobbyServer/Team/SetTeam.cs @@ -20,11 +20,57 @@ namespace EpinelPS.LobbyServer.Team // Add team data to user data 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)) { - 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(); @@ -32,4 +78,4 @@ namespace EpinelPS.LobbyServer.Team await WriteDataAsync(response); } } -} +} \ No newline at end of file