From a53f8b6f060990d229cba04239082c295ab1eec9 Mon Sep 17 00:00:00 2001 From: terencehill Date: Mon, 24 May 2021 16:39:41 +0200 Subject: [PATCH] Don't allow other clients to connect when starting a singleplayer game; also the Quit game button can now tell singleplayer from multiplayer --- qcsrc/common/campaign_setup.qc | 3 +++ .../menu/xonotic/dialog_multiplayer_create.qc | 5 +---- qcsrc/menu/xonotic/dialog_quit.qc | 5 +---- qcsrc/menu/xonotic/dialog_singleplayer.qc | 7 +++---- qcsrc/menu/xonotic/util.qc | 18 ++++++++++++++++++ qcsrc/menu/xonotic/util.qh | 3 +++ 6 files changed, 29 insertions(+), 12 deletions(-) diff --git a/qcsrc/common/campaign_setup.qc b/qcsrc/common/campaign_setup.qc index 8be208980..2b174a68d 100644 --- a/qcsrc/common/campaign_setup.qc +++ b/qcsrc/common/campaign_setup.qc @@ -18,4 +18,7 @@ void CampaignSetup(int n) localcmd("\n"); localcmd("disconnect\nmaxplayers 16\n"); MapInfo_LoadMap(campaign_mapname[n], 1); + #ifdef MENUQC + makeServerSingleplayer(); + #endif } diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_create.qc b/qcsrc/menu/xonotic/dialog_multiplayer_create.qc index 89e015bd7..b2c8de1f7 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_create.qc +++ b/qcsrc/menu/xonotic/dialog_multiplayer_create.qc @@ -70,10 +70,7 @@ void XonoticServerCreateTab_draw(entity me) { entity e = me.quitGameButton; e.disabled = !(gamestatus & (GAME_ISSERVER | GAME_CONNECTED)); - if(cvar("g_campaign")) - e.setText(e, _("Quit campaign")); - else - e.setText(e, _("Quit current game")); + e.setText(e, quitGameButton_getText(e)); SUPER(XonoticServerCreateTab).draw(me); } diff --git a/qcsrc/menu/xonotic/dialog_quit.qc b/qcsrc/menu/xonotic/dialog_quit.qc index b9b18e72e..1bd90038a 100644 --- a/qcsrc/menu/xonotic/dialog_quit.qc +++ b/qcsrc/menu/xonotic/dialog_quit.qc @@ -14,10 +14,7 @@ void XonoticQuitDialog_draw(entity me) { entity e = me.disconnectButton; e.disabled = !(gamestatus & (GAME_ISSERVER | GAME_CONNECTED)); - if(cvar("g_campaign")) - e.setText(e, _("Quit campaign")); - else - e.setText(e, _("Quit current game")); + e.setText(e, quitGameButton_getText(e)); SUPER(XonoticQuitDialog).draw(me); } diff --git a/qcsrc/menu/xonotic/dialog_singleplayer.qc b/qcsrc/menu/xonotic/dialog_singleplayer.qc index b90218fcf..775f4a5b9 100644 --- a/qcsrc/menu/xonotic/dialog_singleplayer.qc +++ b/qcsrc/menu/xonotic/dialog_singleplayer.qc @@ -121,6 +121,8 @@ void InstantAction_LoadMap(entity btn, entity dummy) localcmd("disconnect\n"); localcmd("g_campaign 0\n"); + makeServerSingleplayer(); + MapInfo_LoadMap(s, 1); // configure bots @@ -142,10 +144,7 @@ void XonoticSingleplayerDialog_draw(entity me) { entity e = me.quitGameButton; e.disabled = !(gamestatus & (GAME_ISSERVER | GAME_CONNECTED)); - if(cvar("g_campaign")) - e.setText(e, _("Quit campaign")); - else - e.setText(e, _("Quit current game")); + e.setText(e, quitGameButton_getText(e)); SUPER(XonoticSingleplayerDialog).draw(me); } diff --git a/qcsrc/menu/xonotic/util.qc b/qcsrc/menu/xonotic/util.qc index e77049d20..3283476b1 100644 --- a/qcsrc/menu/xonotic/util.qc +++ b/qcsrc/menu/xonotic/util.qc @@ -817,6 +817,24 @@ void dialog_hudpanel_main_settings(entity me, string panelname) e.configureXonoticTextSliderValues(e); } +void makeServerSingleplayer() +{ + localcmd("defer 0.1 \"sv_cmd settemp net_address 127.0.0.1\"\n"); + localcmd("defer 0.1 \"sv_cmd settemp net_address_ipv6 ::1\"\n"); +} + +string quitGameButton_getText(entity btn) +{ + if (btn.disabled) + return _("Quit current game"); + else if(cvar("g_campaign")) + return _("Quit campaign"); + else if (cvar_string("net_address") == "127.0.0.1" && cvar_string("net_address_ipv6") == "::1") + return _("Quit singleplayer"); + else + return _("Quit multiplayer"); +} + float getFadedAlpha(float currentAlpha, float startAlpha, float targetAlpha) { if(startAlpha < targetAlpha) diff --git a/qcsrc/menu/xonotic/util.qh b/qcsrc/menu/xonotic/util.qh index f5bd636d8..a4e37c7c9 100644 --- a/qcsrc/menu/xonotic/util.qh +++ b/qcsrc/menu/xonotic/util.qh @@ -39,6 +39,9 @@ int GameType_GetTotalCount(); void dialog_hudpanel_main_checkbox(entity me, string panelname); void dialog_hudpanel_main_settings(entity me, string panelname); +void makeServerSingleplayer(); +string quitGameButton_getText(entity btn); + float getFadedAlpha(float currentAlpha, float startAlpha, float targetAlpha); string _Nex_ExtResponseSystem_BannedServers; -- 2.39.2