From: bones_was_here Date: Sun, 19 Mar 2023 16:50:34 +0000 (+1000) Subject: Improve autopause for singleplayer/listen and enable it by default X-Git-Tag: xonotic-v0.8.6~115^2 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=d45aa5b71c10426da65a6983462a12e64d975288;p=xonotic%2Fxonotic-data.pk3dir.git Improve autopause for singleplayer/listen and enable it by default This will pause if all clients are in menu/console/chat. It considers spectators because otherwise they cannot join the match if the current player(s) are in menu/console/chat. Disables snd_cdautopause by default which will only take effect in current DP. Closes #2670 --- diff --git a/qcsrc/server/main.qc b/qcsrc/server/main.qc index bb75f5aa2..8a2da54aa 100644 --- a/qcsrc/server/main.qc +++ b/qcsrc/server/main.qc @@ -192,20 +192,29 @@ void Pause_TryPause_Dedicated(entity this) setpause(1); } -void Pause_TryPause(bool ispaused) +void Pause_TryPause() { - int n = 0; - FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it), { - if (PHYS_INPUT_BUTTON_CHAT(it) != ispaused) return; + int n = 0, p = 0; + FOREACH_CLIENT(IS_REAL_CLIENT(it), { + if (PHYS_INPUT_BUTTON_CHAT(it)) ++p; ++n; }); if (!n) return; - setpause(ispaused); + if (n == p) + setpause(1); + else + setpause(0); } void SV_PausedTic(float elapsedtime) { - if (!server_is_dedicated) Pause_TryPause(false); + if (!server_is_dedicated) + { + if (autocvar_sv_autopause) + Pause_TryPause(); + else + setpause(0); + } } void dedicated_print(string input) @@ -283,7 +292,7 @@ void StartFrame() IL_EACH(g_players, IS_FAKE_CLIENT(it), PlayerPreThink(it)); execute_next_frame(); - if (autocvar_sv_autopause && !server_is_dedicated) Pause_TryPause(true); + if (autocvar_sv_autopause && !server_is_dedicated) Pause_TryPause(); delete_fn = remove_unsafely; // not during spawning! serverprevtime = servertime; diff --git a/xonotic-client.cfg b/xonotic-client.cfg index 22792e06e..4bb3f1fdf 100644 --- a/xonotic-client.cfg +++ b/xonotic-client.cfg @@ -348,6 +348,8 @@ seta cl_announcer default "name of the announcer you wish to use from data/sound seta cl_announcer_antispam 2 "number of seconds before an announcement of the same sound can be played again" seta cl_announcer_maptime 3 "play announcer sound telling you the remaining maptime - 0: do not play at all, 1: play at one minute, 2: play at five minutes, 3: play both" +set snd_cdautopause 0 + // aliases: alias +fire +attack alias -fire -attack diff --git a/xonotic-server.cfg b/xonotic-server.cfg index 511887ec1..2b04015a4 100644 --- a/xonotic-server.cfg +++ b/xonotic-server.cfg @@ -51,7 +51,7 @@ set sv_timeout_number 2 "how many timeouts one player is allowed to call (gets r set sv_timeout_leadtime 4 "how long the players will be informed that a timeout was called before it starts, in seconds" set sv_timeout_resumetime 3 "how long the remaining timeout-time will be after a player called the timein command" -set sv_autopause 0 "Single player: pause while the menu or console is open. Dedicated server: pause after starting a map if the server is empty and unpause when the first player joins the empty server." +set sv_autopause 1 "Single player or listen server: pause while all clients have the menu, console or chat open. Dedicated server: pause after starting a map if the server is empty and unpause when the first player joins the empty server." set g_telefrags 1 "telefragging, i.e. killing someone who stands in the way of someone who is teleporting" set g_telefrags_teamplay 1 "never telefrag team mates"