From 26f12160171e3c068a27e24da45f5ad47708e203 Mon Sep 17 00:00:00 2001 From: bill-rich Date: Fri, 20 Mar 2026 10:55:50 -0700 Subject: [PATCH] feat(lobby): Add server support for Random button in game lobbies --- .../Controllers/Lobby/LobbyController.cs | 47 ++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/GenOnlineService/Controllers/Lobby/LobbyController.cs b/GenOnlineService/Controllers/Lobby/LobbyController.cs index eedb746..e4e3c57 100644 --- a/GenOnlineService/Controllers/Lobby/LobbyController.cs +++ b/GenOnlineService/Controllers/Lobby/LobbyController.cs @@ -121,7 +121,8 @@ enum ELobbyUpdateField AI_TEAM = 15, AI_START_POS = 16, MAX_CAMERA_HEIGHT = 17, - JOINABILITY = 18 + JOINABILITY = 18, + HOST_ACTION_BULK_SLOT_UPDATE = 19 }; public class RouteHandler_PUT_Lobby_Result : APIResult @@ -359,7 +360,8 @@ enum ELobbyUpdatePermissions [ELobbyUpdateField.AI_TEAM] = ELobbyUpdatePermissions.LobbyOwner, [ELobbyUpdateField.AI_START_POS] = ELobbyUpdatePermissions.LobbyOwner, [ELobbyUpdateField.MAX_CAMERA_HEIGHT] = ELobbyUpdatePermissions.LobbyOwner, - [ELobbyUpdateField.JOINABILITY] = ELobbyUpdatePermissions.LobbyOwner + [ELobbyUpdateField.JOINABILITY] = ELobbyUpdatePermissions.LobbyOwner, + [ELobbyUpdateField.HOST_ACTION_BULK_SLOT_UPDATE] = ELobbyUpdatePermissions.LobbyOwner }; @@ -648,6 +650,47 @@ public async Task Post(Int64 lobbyID) ELobbyJoinability newLobbyJoinability = (ELobbyJoinability)data["joinability"].GetInt32(); lobby.UpdateJoinability(newLobbyJoinability); } + else if (field == ELobbyUpdateField.HOST_ACTION_BULK_SLOT_UPDATE) + { + if (data.ContainsKey("slots")) + { + await using var db = await _dbFactory.CreateDbContextAsync(); + foreach (JsonElement slotEntry in data["slots"].EnumerateArray()) + { + try + { + if (!slotEntry.TryGetProperty("slot_index", out var slotIndexProp) || + !slotEntry.TryGetProperty("side", out var sideProp) || + !slotEntry.TryGetProperty("color", out var colorProp) || + !slotEntry.TryGetProperty("start_pos", out var startPosProp) || + !slotEntry.TryGetProperty("team", out var teamProp)) + { + continue; + } + + int slotIndex = slotIndexProp.GetInt32(); + int side = sideProp.GetInt32(); + int color = colorProp.GetInt32(); + int start_pos = startPosProp.GetInt32(); + int team = teamProp.GetInt32(); + + LobbyMember? TargetMember = lobby.GetMemberFromSlot(slotIndex); + if (TargetMember != null) + { + await TargetMember.UpdateSide(db, side, start_pos); + await TargetMember.UpdateColor(db, color); + TargetMember.UpdateStartPos(start_pos); + TargetMember.UpdateTeam(team); + } + } + catch + { + continue; + } + } + lobby.DirtyRetransmit(); + } + } } }