From 959804b167e4fcad4db728157141df09764d7f48 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Fri, 22 Dec 2017 13:59:18 +0000 Subject: [PATCH] Restore separated server creation dialog. This also adds details about advertising and configuration. --- .../Widgets/Logic/MultiplayerLogic.cs | 46 +-- .../Widgets/Logic/ServerCreationLogic.cs | 110 +++++- mods/cnc/chrome/multiplayer-createserver.yaml | 353 ++++++++++++----- mods/cnc/chrome/multiplayer.yaml | 14 +- .../chrome/multiplayer-createserver.yaml | 362 +++++++++++++----- mods/common/chrome/multiplayer.yaml | 17 +- mods/common/metrics.yaml | 3 + 7 files changed, 633 insertions(+), 272 deletions(-) diff --git a/OpenRA.Mods.Common/Widgets/Logic/MultiplayerLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MultiplayerLogic.cs index 3c8424f04b..5bd53fafa6 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MultiplayerLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MultiplayerLogic.cs @@ -26,9 +26,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic { static readonly Action DoNothing = () => { }; - enum PanelType { Browser, CreateServer } - PanelType panel = PanelType.Browser; - readonly Color incompatibleVersionColor; readonly Color incompatibleProtectedGameColor; readonly Color protectedGameColor; @@ -85,19 +82,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic incompatibleGameStartedColor = ChromeMetrics.Get("IncompatibleGameStartedColor"); LoadBrowserPanel(widget); - LoadCreateServerPanel(widget); // Filter and refresh buttons act on the browser panel, // but remain visible (disabled) on the other panels var refreshButton = widget.Get("REFRESH_BUTTON"); - refreshButton.IsDisabled = () => searchStatus == SearchStatus.Fetching || panel != PanelType.Browser; + refreshButton.IsDisabled = () => searchStatus == SearchStatus.Fetching; var filtersButton = widget.Get("FILTERS_DROPDOWNBUTTON"); - filtersButton.IsDisabled = () => searchStatus == SearchStatus.Fetching || panel != PanelType.Browser; - - var browserTab = widget.Get("BROWSER_TAB"); - browserTab.IsHighlighted = () => panel == PanelType.Browser; - browserTab.OnClick = () => panel = PanelType.Browser; + filtersButton.IsDisabled = () => searchStatus == SearchStatus.Fetching; var directConnectButton = widget.Get("DIRECTCONNECT_BUTTON"); directConnectButton.OnClick = () => @@ -111,9 +103,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic }); }; - var createServerTab = widget.Get("CREATE_TAB"); - createServerTab.IsHighlighted = () => panel == PanelType.CreateServer; - createServerTab.OnClick = () => panel = PanelType.CreateServer; + var createServerButton = widget.Get("CREATE_BUTTON"); + createServerButton.OnClick = () => + { + Ui.OpenWindow("MULTIPLAYER_CREATESERVER_PANEL", new WidgetArgs + { + { "openLobby", OpenLobby }, + { "onExit", DoNothing } + }); + }; widget.Get("BACK_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); }; @@ -154,7 +152,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic void LoadBrowserPanel(Widget widget) { var browserPanel = Game.LoadWidget(null, "MULTIPLAYER_BROWSER_PANEL", widget.Get("TOP_PANELS_ROOT"), new WidgetArgs()); - browserPanel.IsVisible = () => panel == PanelType.Browser; serverList = browserPanel.Get("SERVER_LIST"); headerTemplate = serverList.Get("HEADER_TEMPLATE"); @@ -275,18 +272,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic } } - void LoadCreateServerPanel(Widget widget) - { - var createServerPanel = Game.LoadWidget(null, "MULTIPLAYER_CREATESERVER_PANEL", - widget.Get("TOP_PANELS_ROOT"), new WidgetArgs - { - { "openLobby", OpenLobby }, - { "onExit", DoNothing } - }); - - createServerPanel.IsVisible = () => panel == PanelType.CreateServer; - } - string PlayersLabel(GameServer game) { return "{0}{1}{2}".F( @@ -553,15 +538,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic }); } - void OpenCreateServerPanel() - { - Ui.OpenWindow("CREATESERVER_PANEL", new WidgetArgs - { - { "openLobby", OpenLobby }, - { "onExit", DoNothing } - }); - } - void Join(GameServer server) { if (server == null || !server.IsJoinable) diff --git a/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs index 940a12c1a4..96fa31195d 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs @@ -10,16 +10,20 @@ #endregion using System; +using System.Drawing; +using System.Linq; using System.Net; +using OpenRA.Network; using OpenRA.Widgets; namespace OpenRA.Mods.Common.Widgets.Logic { public class ServerCreationLogic : ChromeLogic { - Widget panel; - Action onCreate; - Action onExit; + readonly Widget panel; + readonly LabelWidget noticesLabelA, noticesLabelB, noticesLabelC; + readonly Action onCreate; + readonly Action onExit; MapPreview preview = MapCache.UnknownMap; bool advertiseOnline; @@ -33,6 +37,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic var settings = Game.Settings; preview = modData.MapCache[modData.MapCache.ChooseInitialMap(Game.Settings.Server.Map, Game.CosmeticRandom)]; + panel.Get("BACK_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); }; panel.Get("CREATE_BUTTON").OnClick = CreateAndJoin; var mapButton = panel.GetOrNull("MAP_BUTTON"); @@ -53,12 +58,29 @@ namespace OpenRA.Mods.Common.Widgets.Logic panel.Get("MAP_PREVIEW").Preview = () => preview; - var mapTitle = panel.Get("MAP_NAME"); - if (mapTitle != null) + var titleLabel = panel.GetOrNull("MAP_TITLE"); + if (titleLabel != null) { - var font = Game.Renderer.Fonts[mapTitle.Font]; - var title = new CachedTransform(m => WidgetUtils.TruncateText(m.Title, mapTitle.Bounds.Width, font)); - mapTitle.GetText = () => title.Update(preview); + var font = Game.Renderer.Fonts[titleLabel.Font]; + var title = new CachedTransform(m => WidgetUtils.TruncateText(m.Title, titleLabel.Bounds.Width, font)); + titleLabel.GetText = () => title.Update(preview); + titleLabel.GetTooltipText = () => preview.Title; + } + + var typeLabel = panel.GetOrNull("MAP_TYPE"); + if (typeLabel != null) + { + var type = new CachedTransform(m => m.Categories.FirstOrDefault() ?? ""); + typeLabel.GetText = () => type.Update(preview); + } + + var authorLabel = panel.GetOrNull("MAP_AUTHOR"); + if (authorLabel != null) + { + var font = Game.Renderer.Fonts[authorLabel.Font]; + var author = new CachedTransform( + m => WidgetUtils.TruncateText("Created by {0}".F(m.Author), authorLabel.Bounds.Width, font)); + authorLabel.GetText = () => author.Update(preview); } } @@ -81,11 +103,80 @@ namespace OpenRA.Mods.Common.Widgets.Logic var advertiseCheckbox = panel.Get("ADVERTISE_CHECKBOX"); advertiseCheckbox.IsChecked = () => advertiseOnline; - advertiseCheckbox.OnClick = () => advertiseOnline ^= true; + advertiseCheckbox.OnClick = () => + { + advertiseOnline ^= true; + BuildNotices(); + }; var passwordField = panel.GetOrNull("PASSWORD"); if (passwordField != null) passwordField.Text = Game.Settings.Server.Password; + + noticesLabelA = panel.GetOrNull("NOTICES_HEADER_A"); + noticesLabelB = panel.GetOrNull("NOTICES_HEADER_B"); + noticesLabelC = panel.GetOrNull("NOTICES_HEADER_C"); + + var noticesNoUPnP = panel.GetOrNull("NOTICES_NO_UPNP"); + if (noticesNoUPnP != null) + { + noticesNoUPnP.IsVisible = () => advertiseOnline && + (UPnP.Status == UPnPStatus.NotSupported || UPnP.Status == UPnPStatus.Disabled); + + var settingsA = noticesNoUPnP.GetOrNull("SETTINGS_A"); + if (settingsA != null) + settingsA.IsVisible = () => UPnP.Status == UPnPStatus.Disabled; + + var settingsB = noticesNoUPnP.GetOrNull("SETTINGS_B"); + if (settingsB != null) + settingsB.IsVisible = () => UPnP.Status == UPnPStatus.Disabled; + } + + var noticesUPnP = panel.GetOrNull("NOTICES_UPNP"); + if (noticesUPnP != null) + noticesUPnP.IsVisible = () => advertiseOnline && UPnP.Status == UPnPStatus.Enabled; + + var noticesLAN = panel.GetOrNull("NOTICES_LAN"); + if (noticesLAN != null) + noticesLAN.IsVisible = () => !advertiseOnline; + + BuildNotices(); + } + + void BuildNotices() + { + if (noticesLabelA == null || noticesLabelB == null || noticesLabelC == null) + return; + + if (advertiseOnline) + { + noticesLabelA.Text = "Internet Server (UPnP "; + var aWidth = Game.Renderer.Fonts[noticesLabelA.Font].Measure(noticesLabelA.Text).X; + noticesLabelA.Bounds.Width = aWidth; + + var status = UPnP.Status; + noticesLabelB.Text = status == UPnPStatus.Enabled ? "Enabled" : + status == UPnPStatus.NotSupported ? "Not Supported" : "Disabled"; + + noticesLabelB.TextColor = status == UPnPStatus.Enabled ? ChromeMetrics.Get("UPnPEnabledColor") : + status == UPnPStatus.NotSupported ? ChromeMetrics.Get("UPnPNotSupportedColor") : + ChromeMetrics.Get("UPnPDisabledColor"); + + var bWidth = Game.Renderer.Fonts[noticesLabelB.Font].Measure(noticesLabelB.Text).X; + noticesLabelB.Bounds.X = noticesLabelA.Bounds.Right; + noticesLabelB.Bounds.Width = bWidth; + noticesLabelB.Visible = true; + + noticesLabelC.Text = "):"; + noticesLabelC.Bounds.X = noticesLabelB.Bounds.Right; + noticesLabelC.Visible = true; + } + else + { + noticesLabelA.Text = "Local Server:"; + noticesLabelB.Visible = false; + noticesLabelC.Visible = false; + } } void CreateAndJoin() @@ -131,6 +222,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic return; } + Ui.CloseWindow(); ConnectionLogic.Connect(IPAddress.Loopback.ToString(), Game.Settings.Server.ListenPort, password, onCreate, onExit); } } diff --git a/mods/cnc/chrome/multiplayer-createserver.yaml b/mods/cnc/chrome/multiplayer-createserver.yaml index fab582ee34..d206afe533 100644 --- a/mods/cnc/chrome/multiplayer-createserver.yaml +++ b/mods/cnc/chrome/multiplayer-createserver.yaml @@ -1,98 +1,226 @@ Container@MULTIPLAYER_CREATESERVER_PANEL: Logic: ServerCreationLogic - Width: PARENT_RIGHT - Height: PARENT_BOTTOM + X: (WINDOW_RIGHT - WIDTH) / 2 + Y: (WINDOW_BOTTOM - HEIGHT - 15) / 2 + Width: 530 + Height: 314 Children: Label@TITLE: - Y: 5 - Width: 582 - Height: 25 - Text: Create Server + Width: PARENT_RIGHT + Y: 0-25 + Font: BigBold + Contrast: true Align: Center - Font: Bold - ScrollPanel: - Y: 30 - Width: 582 - Height: 249 + Text: Create Server + Background@bg: + Width: PARENT_RIGHT + Height: PARENT_BOTTOM - 35 + Background: panel-black Children: - Container: - X: 185 - Y: 25 - Children: - Label@SERVER_NAME_LABEL: - Y: 14 - Width: 95 - Height: 25 - Align: Right - Text: Server Name: - TextField@SERVER_NAME: - X: 100 - Y: 15 - Width: 215 - MaxLength: 50 - Height: 25 - Text: My OpenRA Server - Label@PASSWORD_LABEL: - Y: 49 - Width: 95 - Height: 25 - Align: Right - Text: Password: - PasswordField@PASSWORD: - X: 100 - Y: 50 - Width: 145 - MaxLength: 20 - Height: 25 - Label@AFTER_PASSWORD_LABEL: - X: 255 - Y: 49 - Width: 95 - Height: 25 - Align: Left - Text: (optional) - Label@LISTEN_PORT_LABEL: - Y: 84 - Width: 95 - Height: 25 - Align: Right - Text: Port: - TextField@LISTEN_PORT: - X: 100 - Y: 85 - Width: 50 - Height: 25 - MaxLength: 5 - Text: 1234 - Label@EXTERNAL_PORT_LABEL: - X: 170 - Y: 84 - Width: 90 - Height: 25 - Align: Right - Text: External Port: - TextField@EXTERNAL_PORT: - X: 265 - Y: 85 - Width: 50 - MaxLength: 5 - Height: 25 - Text: 1234 - Checkbox@ADVERTISE_CHECKBOX: - X: 100 - Y: 135 - Width: 150 - Height: 20 - Font: Regular - Text: Advertise Online - Container@SIDEBAR: - X: PARENT_RIGHT - WIDTH - Y: 30 - Width: 174 - Height: 280 - Children: - Background@MAP_BG: + Label@SERVER_NAME_LABEL: + Y: 14 + Width: 105 + Height: 25 + Align: Right + Text: Server Name: + TextField@SERVER_NAME: + X: 110 + Y: 15 + Width: 215 + MaxLength: 50 + Height: 25 + Text: My OpenRA Server + Label@PASSWORD_LABEL: + Y: 49 + Width: 105 + Height: 25 + Align: Right + Text: Password: + PasswordField@PASSWORD: + X: 110 + Y: 50 + Width: 145 + MaxLength: 20 + Height: 25 + Label@AFTER_PASSWORD_LABEL: + X: 265 + Y: 49 + Width: 105 + Height: 25 + Align: Left + Text: (optional) + Label@LISTEN_PORT_LABEL: + Y: 84 + Width: 105 + Height: 25 + Align: Right + Text: Port: + TextField@LISTEN_PORT: + X: 110 + Y: 85 + Width: 50 + Height: 25 + MaxLength: 5 + Text: 1234 + Checkbox@ADVERTISE_CHECKBOX: + X: 15 + Y: 121 + Width: 150 + Height: 20 + Font: Regular + Text: Advertise Online + Label@EXTERNAL_PORT_LABEL: + X: 180 + Y: 119 + Width: 90 + Height: 25 + Align: Right + Text: External Port: + TextField@EXTERNAL_PORT: + X: 275 + Y: 120 + Width: 50 + MaxLength: 5 + Height: 25 + Text: 1234 + Label@NOTICES_HEADER_A: + X: 15 + Y: 165 + Height: 25 + Align: Left + Font: Bold + Label@NOTICES_HEADER_B: + X: 15 + Y: 165 + Height: 25 + Align: Left + Font: Bold + Label@NOTICES_HEADER_C: + X: 15 + Y: 165 + Height: 25 + Align: Left + Font: Bold + Container@NOTICES_LAN: + X: 20 + Y: 185 Width: PARENT_RIGHT + Height: PARENT_BOTTOM + Children: + Label@ADVERTISING: + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - Game will be advertised to the Local Area Network only. + Label@FIREWALL: + Y: 12 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - You must manually configure your firewall to allow connections. + Label@PORTFORWARD_A: + Y: 24 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - Players can connect using Direct IP from the Internet if you + Label@PORTFORWARD_B: + X: 7 + Y: 36 + Width: 295 + Height: 25 + Font: Tiny + Align: Left + Text: manually configure port forwarding on your router. + Container@NOTICES_NO_UPNP: + X: 20 + Y: 185 + Width: PARENT_RIGHT + Height: PARENT_BOTTOM + Children: + Label@ADVERTISING: + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - Game will be advertised to the Local Area Network and Internet. + Label@FIREWALL: + Y: 12 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - You must manually configure your firewall to allow connections. + Label@PORTFORWARD_A: + Y: 24 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - You must manually configure your router to allow and forward + Label@PORTFORWARD_B: + X: 7 + Y: 36 + Width: 295 + Height: 25 + Font: Tiny + Align: Left + Text: connections from the External Port to your local IP and Port. + Label@SETTINGS_A: + Y: 48 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - You can enable UPnP (if supported by your router) in the + Label@SETTINGS_B: + X: 7 + Y: 60 + Width: 295 + Height: 25 + Font: Tiny + Align: Left + Text: Advanced tab of the OpenRA settings menu. + Container@NOTICES_UPNP: + X: 20 + Y: 185 + Width: PARENT_RIGHT + Height: PARENT_BOTTOM + Children: + Label@ADVERTISING: + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - Game will be advertised to the Local Area Network and Internet. + Label@FIREWALL: + Y: 12 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - You must manually configure your firewall to allow connections. + Label@PORTFORWARD_A: + Y: 24 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - OpenRA will use UPnP to automaticaly configure port forwarding. + Label@SETTINGS_A: + Y: 36 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - You can disable UPnP in the OpenRA settings menu. + Background@MAP_BG: + X: PARENT_RIGHT - 189 + Y: 15 + Width: 174 Height: 174 Background: panel-gray Children: @@ -101,22 +229,47 @@ Container@MULTIPLAYER_CREATESERVER_PANEL: Y: 1 Width: PARENT_RIGHT - 2 Height: PARENT_RIGHT - 2 - Label@MAP_NAME: - Y: 172 - Width: PARENT_RIGHT + LabelWithTooltip@MAP_TITLE: + X: PARENT_RIGHT - 189 + Y: 187 + Width: 174 Height: 25 Font: Bold Align: Center - Button@MAP_BUTTON: - X: PARENT_RIGHT - WIDTH - Y: 284 - 30 - Width: 174 - Height: 25 - Text: Choose Map + TooltipContainer: TOOLTIP_CONTAINER + TooltipTemplate: SIMPLE_TOOLTIP + Label@MAP_TYPE: + X: PARENT_RIGHT - 189 + Y: 202 + Width: 174 + Height: 25 + Font: TinyBold + Align: Center + IgnoreMouseOver: true + Label@MAP_AUTHOR: + X: PARENT_RIGHT - 189 + Y: 215 + Width: 174 + Height: 25 + Font: Tiny + Align: Center + Button@MAP_BUTTON: + X: PARENT_RIGHT - 189 + Y: PARENT_BOTTOM - 40 + Width: 174 + Height: 25 + Text: Change Map + Button@BACK_BUTTON: + Key: return + Y: PARENT_BOTTOM - 36 + Width: 140 + Height: 35 + Text: Back Button@CREATE_BUTTON: Key: return X: PARENT_RIGHT - WIDTH - Y: 284 - Width: 174 - Height: 25 + Y: PARENT_BOTTOM - 36 + Width: 140 + Height: 35 Text: Create + TooltipContainer@TOOLTIP_CONTAINER: \ No newline at end of file diff --git a/mods/cnc/chrome/multiplayer.yaml b/mods/cnc/chrome/multiplayer.yaml index 8cd2519b56..df98f5b4c0 100644 --- a/mods/cnc/chrome/multiplayer.yaml +++ b/mods/cnc/chrome/multiplayer.yaml @@ -30,22 +30,16 @@ Container@MULTIPLAYER_PANEL: Height: 25 Text: Refresh Button@DIRECTCONNECT_BUTTON: - X: 277 + X: 387 Y: 284 Width: 100 Height: 25 Text: Direct IP - Button@BROWSER_TAB: - X: 382 - Y: 278 - Width: 105 - Height: 31 - Text: Browse - Button@CREATE_TAB: + Button@CREATE_BUTTON: X: 492 - Y: 278 + Y: 284 Width: 105 - Height: 31 + Height: 25 Text: Create Container@TOP_PANELS_ROOT: X: 15 diff --git a/mods/common/chrome/multiplayer-createserver.yaml b/mods/common/chrome/multiplayer-createserver.yaml index 87ec464428..142fe8e43d 100644 --- a/mods/common/chrome/multiplayer-createserver.yaml +++ b/mods/common/chrome/multiplayer-createserver.yaml @@ -1,124 +1,274 @@ -Container@MULTIPLAYER_CREATESERVER_PANEL: +Background@MULTIPLAYER_CREATESERVER_PANEL: Logic: ServerCreationLogic - Width: PARENT_RIGHT - Height: PARENT_BOTTOM + X: (WINDOW_RIGHT - WIDTH)/2 + Y: (WINDOW_BOTTOM - HEIGHT)/2 + Width: 530 + Height: 345 Children: Label@TITLE: - Y: 5 - Width: 582 + Y: 15 + Width: PARENT_RIGHT Height: 25 Text: Create Server Align: Center Font: Bold - ScrollPanel: - Y: 30 - Width: 583 - Height: PARENT_BOTTOM - 30 + Label@SERVER_NAME_LABEL: + Y: 44 + Width: 105 + Height: 25 + Align: Right + Text: Server Name: + TextField@SERVER_NAME: + X: 110 + Y: 45 + Width: 215 + MaxLength: 50 + Height: 25 + Text: My OpenRA Server + Label@PASSWORD_LABEL: + Y: 79 + Width: 105 + Height: 25 + Align: Right + Text: Password: + PasswordField@PASSWORD: + X: 110 + Y: 80 + Width: 145 + MaxLength: 20 + Height: 25 + Label@AFTER_PASSWORD_LABEL: + X: 265 + Y: 79 + Width: 95 + Height: 25 + Align: Left + Text: (optional) + Label@LISTEN_PORT_LABEL: + Y: 114 + Width: 105 + Height: 25 + Align: Right + Text: Port: + TextField@LISTEN_PORT: + X: 110 + Y: 115 + Width: 50 + Height: 25 + MaxLength: 5 + Text: 1234 + Checkbox@ADVERTISE_CHECKBOX: + X: 20 + Y: 151 + Width: 150 + Height: 20 + Font: Regular + Text: Advertise Online + Label@EXTERNAL_PORT_LABEL: + X: 180 + Y: 149 + Width: 90 + Height: 25 + Align: Right + Text: External Port: + TextField@EXTERNAL_PORT: + X: 275 + Y: 150 + Width: 50 + MaxLength: 5 + Height: 25 + Text: 1234 + Label@NOTICES_HEADER_A: + X: 20 + Y: 185 + Height: 25 + Align: Left + Font: Bold + Label@NOTICES_HEADER_B: + X: 20 + Y: 185 + Height: 25 + Align: Left + Font: Bold + Label@NOTICES_HEADER_C: + X: 20 + Y: 185 + Height: 25 + Align: Left + Font: Bold + Container@NOTICES_LAN: + X: 25 + Y: 205 + Width: PARENT_RIGHT + Height: PARENT_BOTTOM Children: - Container: - X: 185 - Y: 30 - Children: - Label@SERVER_NAME_LABEL: - Y: 14 - Width: 95 - Height: 25 - Align: Right - Text: Server Name: - TextField@SERVER_NAME: - X: 100 - Y: 15 - Width: 215 - MaxLength: 50 - Height: 25 - Text: My OpenRA Server - Label@PASSWORD_LABEL: - Y: 49 - Width: 95 - Height: 25 - Align: Right - Text: Password: - PasswordField@PASSWORD: - X: 100 - Y: 50 - Width: 145 - MaxLength: 20 - Height: 25 - Label@AFTER_PASSWORD_LABEL: - X: 255 - Y: 49 - Width: 95 - Height: 25 - Align: Left - Text: (optional) - Label@LISTEN_PORT_LABEL: - Y: 84 - Width: 95 - Height: 25 - Align: Right - Text: Port: - TextField@LISTEN_PORT: - X: 100 - Y: 85 - Width: 50 - Height: 25 - MaxLength: 5 - Text: 1234 - Label@EXTERNAL_PORT_LABEL: - X: 170 - Y: 84 - Width: 90 - Height: 25 - Align: Right - Text: External Port: - TextField@EXTERNAL_PORT: - X: 265 - Y: 85 - Width: 50 - MaxLength: 5 - Height: 25 - Text: 1234 - Checkbox@ADVERTISE_CHECKBOX: - X: 100 - Y: 135 - Width: 150 - Height: 20 - Font: Regular - Text: Advertise Online - Container@SIDEBAR: - X: PARENT_RIGHT - WIDTH - Y: 30 - Width: 174 - Height: 280 - Children: - Background@MAP_BG: - Width: PARENT_RIGHT - Height: 174 - Background: dialog3 - Children: - MapPreview@MAP_PREVIEW: - X: 1 - Y: 1 - Width: PARENT_RIGHT - 2 - Height: PARENT_RIGHT - 2 - Label@MAP_NAME: - Y: 172 - Width: PARENT_RIGHT + Label@ADVERTISING: + Width: 305 Height: 25 - Font: Bold - Align: Center - Button@MAP_BUTTON: - X: PARENT_RIGHT - WIDTH - Y: 240 + Font: Tiny + Align: Left + Text: - Game will be advertised to the Local Area Network only. + Label@FIREWALL: + Y: 12 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - You must manually configure your firewall to allow connections. + Label@PORTFORWARD_A: + Y: 24 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - Players can connect using Direct IP from the Internet if you + Label@PORTFORWARD_B: + X: 7 + Y: 36 + Width: 295 + Height: 25 + Font: Tiny + Align: Left + Text: manually configure port forwarding on your router. + Container@NOTICES_NO_UPNP: + X: 25 + Y: 205 + Width: PARENT_RIGHT + Height: PARENT_BOTTOM + Children: + Label@ADVERTISING: + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - Game will be advertised to the Local Area Network and Internet. + Label@FIREWALL: + Y: 12 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - You must manually configure your firewall to allow connections. + Label@PORTFORWARD_A: + Y: 24 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - You must manually configure your router to allow and forward + Label@PORTFORWARD_B: + X: 7 + Y: 36 + Width: 295 + Height: 25 + Font: Tiny + Align: Left + Text: connections from the External Port to your local IP and Port. + Label@SETTINGS_A: + Y: 48 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - You can enable UPnP (if supported by your router) in the + Label@SETTINGS_B: + X: 7 + Y: 60 + Width: 295 + Height: 25 + Font: Tiny + Align: Left + Text: Advanced tab of the OpenRA settings menu. + Container@NOTICES_UPNP: + X: 25 + Y: 205 + Width: PARENT_RIGHT + Height: PARENT_BOTTOM + Children: + Label@ADVERTISING: + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - Game will be advertised to the Local Area Network and Internet. + Label@FIREWALL: + Y: 12 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - You must manually configure your firewall to allow connections. + Label@PORTFORWARD_A: + Y: 24 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - OpenRA will use UPnP to automaticaly configure port forwarding. + Label@SETTINGS_A: + Y: 36 + Width: 305 + Height: 25 + Font: Tiny + Align: Left + Text: - You can disable UPnP in the OpenRA settings menu. + Background@MAP_BG: + X: PARENT_RIGHT - 194 + Y: 45 + Width: 174 + Height: 174 + Background: dialog3 + Children: + MapPreview@MAP_PREVIEW: + X: 1 + Y: 1 + Width: PARENT_RIGHT - 2 + Height: PARENT_RIGHT - 2 + LabelWithTooltip@MAP_TITLE: + X: PARENT_RIGHT - 194 + Y: 217 Width: 174 Height: 25 - Text: Choose Map Font: Bold + Align: Center + TooltipContainer: TOOLTIP_CONTAINER + TooltipTemplate: SIMPLE_TOOLTIP + Label@MAP_TYPE: + X: PARENT_RIGHT - 194 + Y: 232 + Width: 174 + Height: 25 + Font: TinyBold + Align: Center + IgnoreMouseOver: true + Label@MAP_AUTHOR: + X: PARENT_RIGHT - 194 + Y: 245 + Width: 174 + Height: 25 + Font: Tiny + Align: Center + Button@MAP_BUTTON: + X: PARENT_RIGHT - 194 + Y: 268 + Width: 174 + Height: 25 + Text: Change Map + Font: Bold + Button@BACK_BUTTON: + X: PARENT_RIGHT - 194 + Y: PARENT_BOTTOM - 45 + Width: 174 + Height: 25 + Text: Back + Font: Bold + Key: escape Button@CREATE_BUTTON: Key: return - X: PARENT_RIGHT - WIDTH - Y: PARENT_BOTTOM - 25 + X: 20 + Y: PARENT_BOTTOM - 45 Width: 174 Height: 25 Text: Create Font: Bold + TooltipContainer@TOOLTIP_CONTAINER: \ No newline at end of file diff --git a/mods/common/chrome/multiplayer.yaml b/mods/common/chrome/multiplayer.yaml index c0615fe696..b20dd687e3 100644 --- a/mods/common/chrome/multiplayer.yaml +++ b/mods/common/chrome/multiplayer.yaml @@ -27,24 +27,17 @@ Background@MULTIPLAYER_PANEL: Text: Refresh Font: Bold Button@DIRECTCONNECT_BUTTON: - X: 288 + X: 398 Y: PARENT_BOTTOM - HEIGHT - 20 Width: 100 Height: 25 Text: Direct IP Font: Bold - Button@BROWSER_TAB: - X: 393 + Button@CREATE_BUTTON: + X: 503 Y: PARENT_BOTTOM - HEIGHT - 20 - Width: 105 - Height: 31 - Text: Browse - Font: Bold - Button@CREATE_TAB: - X: 498 - Y: PARENT_BOTTOM - HEIGHT - 20 - Width: 105 - Height: 31 + Width: 100 + Height: 25 Text: Create Font: Bold Container@TOP_PANELS_ROOT: diff --git a/mods/common/metrics.yaml b/mods/common/metrics.yaml index c29df52199..3096ca51f7 100644 --- a/mods/common/metrics.yaml +++ b/mods/common/metrics.yaml @@ -38,3 +38,6 @@ Metrics: TextfieldColorInvalid: FFC0C0 TextfieldFont: Regular WaitingGameColor: 00FF00 + UPnPDisabledColor: FFFFFF + UPnPEnabledColor: 00FF00 + UPnPNotSupportedColor: FF0000 \ No newline at end of file