diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index 0d4fe29adc..cd9fe97c59 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -64,7 +64,6 @@ namespace OpenRA.Server lobbyInfo = new Session( settings.Game.Mods ); lobbyInfo.GlobalSettings.RandomSeed = randomSeed; lobbyInfo.GlobalSettings.Map = map; - lobbyInfo.GlobalSettings.AllowCheats = settings.Server.AllowCheats; lobbyInfo.GlobalSettings.ServerName = settings.Server.Name; foreach (var t in ServerTraits.WithInterface()) diff --git a/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs b/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs index 42a2e0f485..c61f194706 100644 --- a/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs +++ b/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs @@ -226,6 +226,19 @@ namespace OpenRA.Mods.RA.Server server.SyncLobbyInfo(); return true; }}, + { "allowcheats", + s => + { + if (conn.PlayerIndex != 0) + { + server.SendChatTo( conn, "Only the host can set that option" ); + return true; + } + + bool.TryParse(s, out server.lobbyInfo.GlobalSettings.AllowCheats); + server.SyncLobbyInfo(); + return true; + }}, { "kick", s => { diff --git a/OpenRA.Mods.RA/Widgets/Delegates/CreateServerMenuDelegate.cs b/OpenRA.Mods.RA/Widgets/Delegates/CreateServerMenuDelegate.cs index a46ab53004..f8adf5ec66 100644 --- a/OpenRA.Mods.RA/Widgets/Delegates/CreateServerMenuDelegate.cs +++ b/OpenRA.Mods.RA/Widgets/Delegates/CreateServerMenuDelegate.cs @@ -43,8 +43,6 @@ namespace OpenRA.Mods.RA.Widgets.Delegates cs.GetWidget("EXTERNAL_PORT").Text = settings.Server.ExternalPort.ToString(); cs.GetWidget("CHECKBOX_ONLINE").Bind(settings.Server, "AdvertiseOnline"); cs.GetWidget("CHECKBOX_ONLINE").OnChange += _ => settings.Save(); - cs.GetWidget("CHECKBOX_CHEATS").Bind(settings.Server, "AllowCheats"); - cs.GetWidget("CHECKBOX_CHEATS").OnChange += _ => settings.Save(); } } } diff --git a/OpenRA.Mods.RA/Widgets/Delegates/GameInitDelegate.cs b/OpenRA.Mods.RA/Widgets/Delegates/GameInitDelegate.cs index bf9ff5d450..689d5105b1 100755 --- a/OpenRA.Mods.RA/Widgets/Delegates/GameInitDelegate.cs +++ b/OpenRA.Mods.RA/Widgets/Delegates/GameInitDelegate.cs @@ -52,7 +52,8 @@ namespace OpenRA.Mods.RA.Widgets.Delegates var lobby = Game.OpenWindow(orderManager.world, "SERVER_LOBBY"); lobby.GetWidget("CHAT_DISPLAY").ClearChat(); lobby.GetWidget("CHANGEMAP_BUTTON").Visible = true; - lobby.GetWidget("LOCKTEAMS_CHECKBOX").Visible = true; + lobby.GetWidget("LOCKTEAMS_CHECKBOX").Visible = true; + lobby.GetWidget("ALLOWCHEATS_CHECKBOX").Visible = true; lobby.GetWidget("DISCONNECT_BUTTON").Visible = true; break; } diff --git a/OpenRA.Mods.RA/Widgets/Delegates/LobbyDelegate.cs b/OpenRA.Mods.RA/Widgets/Delegates/LobbyDelegate.cs index 532b7c9fba..d5f14001d4 100755 --- a/OpenRA.Mods.RA/Widgets/Delegates/LobbyDelegate.cs +++ b/OpenRA.Mods.RA/Widgets/Delegates/LobbyDelegate.cs @@ -112,6 +112,15 @@ namespace OpenRA.Mods.RA.Widgets.Delegates if (Game.IsHost) orderManager.IssueOrder(Order.Command( "lockteams {0}".F(!orderManager.LobbyInfo.GlobalSettings.LockTeams))); + }; + + var allowCheats = lobby.GetWidget("ALLOWCHEATS_CHECKBOX"); + allowCheats.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.AllowCheats; + allowCheats.OnChange += _ => + { + if (Game.IsHost) + orderManager.IssueOrder(Order.Command( + "allowcheats {0}".F(!orderManager.LobbyInfo.GlobalSettings.AllowCheats))); }; var startGameButton = lobby.GetWidget("START_GAME_BUTTON"); diff --git a/mods/cnc/chrome/gamelobby.yaml b/mods/cnc/chrome/gamelobby.yaml index 1d20bf2fc8..cd8ea00dbb 100644 --- a/mods/cnc/chrome/gamelobby.yaml +++ b/mods/cnc/chrome/gamelobby.yaml @@ -330,7 +330,7 @@ Background@SERVER_LOBBY: Button@DISCONNECT_BUTTON: Id:DISCONNECT_BUTTON X:PARENT_RIGHT-154 - Y:PARENT_BOTTOM-189 + Y:PARENT_BOTTOM-189+25 Width:120 Height:25 Text:Disconnect @@ -342,6 +342,13 @@ Background@SERVER_LOBBY: Width: 80 Height: 20 Text: Lock Teams + Checkbox@ALLOWCHEATS_CHECKBOX: + Id:ALLOWCHEATS_CHECKBOX + X: PARENT_RIGHT-154 + Y: PARENT_BOTTOM-229+25 + Width: 80 + Height: 20 + Text: Allow Cheats Background@COLOR_CHOOSER: Id:COLOR_CHOOSER Background:dialog2 diff --git a/mods/cnc/chrome/serverbrowser.yaml b/mods/cnc/chrome/serverbrowser.yaml index 5246e5d585..0ed63b8f9a 100644 --- a/mods/cnc/chrome/serverbrowser.yaml +++ b/mods/cnc/chrome/serverbrowser.yaml @@ -69,13 +69,6 @@ Background@CREATESERVER_BG: Width:300 Height:20 Text:Advertise game Online - Checkbox@CHECKBOX_CHEATS: - Id:CHECKBOX_CHEATS - X:165 - Y:160 - Width:300 - Height:20 - Text:Allow Cheats Button@BUTTON_START: Id:BUTTON_START X:130 diff --git a/mods/ra/chrome/gamelobby.yaml b/mods/ra/chrome/gamelobby.yaml index da500d7439..2da30b04c9 100644 --- a/mods/ra/chrome/gamelobby.yaml +++ b/mods/ra/chrome/gamelobby.yaml @@ -330,7 +330,7 @@ Background@SERVER_LOBBY: Button@DISCONNECT_BUTTON: Id:DISCONNECT_BUTTON X:PARENT_RIGHT-154 - Y:PARENT_BOTTOM-189 + Y:PARENT_BOTTOM-189+25 Width:120 Height:25 Text:Disconnect @@ -342,6 +342,13 @@ Background@SERVER_LOBBY: Width: 80 Height: 20 Text: Lock Teams + Checkbox@ALLOWCHEATS_CHECKBOX: + Id:ALLOWCHEATS_CHECKBOX + X: PARENT_RIGHT-154 + Y: PARENT_BOTTOM-229+25 + Width: 80 + Height: 20 + Text: Allow Cheats Background@COLOR_CHOOSER: Id:COLOR_CHOOSER Background:dialog2 diff --git a/mods/ra/chrome/serverbrowser.yaml b/mods/ra/chrome/serverbrowser.yaml index 5246e5d585..0ed63b8f9a 100644 --- a/mods/ra/chrome/serverbrowser.yaml +++ b/mods/ra/chrome/serverbrowser.yaml @@ -69,13 +69,6 @@ Background@CREATESERVER_BG: Width:300 Height:20 Text:Advertise game Online - Checkbox@CHECKBOX_CHEATS: - Id:CHECKBOX_CHEATS - X:165 - Y:160 - Width:300 - Height:20 - Text:Allow Cheats Button@BUTTON_START: Id:BUTTON_START X:130