From cdfb2cff2675502693da844577d2c67d3153c518 Mon Sep 17 00:00:00 2001 From: sprunk Date: Tue, 15 Apr 2025 15:59:44 +0200 Subject: [PATCH 01/13] Clarify instructions on getting a dev engine capable room (#3007) --- ZkLobbyServer/autohost/Commands/CmdEngine.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZkLobbyServer/autohost/Commands/CmdEngine.cs b/ZkLobbyServer/autohost/Commands/CmdEngine.cs index fffa9a13d2..326d56dd9f 100644 --- a/ZkLobbyServer/autohost/Commands/CmdEngine.cs +++ b/ZkLobbyServer/autohost/Commands/CmdEngine.cs @@ -23,7 +23,7 @@ public override string Arm(ServerBattle battle, Say e, string arguments = null) if ((battle.Mode != AutohostMode.None || !battle.IsPassworded) && engine != battle.server.Engine && !battle.IsAutohost) { - battle.Respond(e, $"You cannot change engine to version other than {battle.server.Engine} here, use custom passworded room"); + battle.Respond(e, $"You cannot change engine to version other than {battle.server.Engine} here, must be the Custom room type (say '!type custom') and passworded (say '!password bla', can remove it afterwards via '!password')"); return null; } From 06880539573a9a9a702fdf9a72031aa4714b18d8 Mon Sep 17 00:00:00 2001 From: GoogleFrog Date: Thu, 10 Jul 2025 13:53:47 +1000 Subject: [PATCH 02/13] Blind attempt to move players of the previous game to the back of the waiting list. --- ZkLobbyServer/ServerBattle.cs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/ZkLobbyServer/ServerBattle.cs b/ZkLobbyServer/ServerBattle.cs index 69b6e4734b..3d5d76920e 100644 --- a/ZkLobbyServer/ServerBattle.cs +++ b/ZkLobbyServer/ServerBattle.cs @@ -55,6 +55,7 @@ public class ServerBattle : Battle protected bool IsPollsBlocked => IsAutohost && DateTime.UtcNow < BlockPollsUntil; private List kickedPlayers = new List(); + private List previousGamePlayers = new List(); public List Debriefings { get; private set; } = new List(); private Timer pollTimer; @@ -207,6 +208,13 @@ public ConnectSpring GetConnectSpringStructure(string scriptPassword, bool isSpe }; } + public bool IsInPreviousGame(string name) + { + var inPrevious = false; + if (previousGamePlayers.Any(y => y.Name == name)) inPrevious = true; + return inPrevious; + } + public bool IsKicked(string name) { var kicked = false; @@ -1053,7 +1061,11 @@ public virtual void ValidateBattleStatus(UserBattleStatus ubs) SayBattle("Your Rank (" + Ranks.RankNames[ubs.LobbyUser.Rank] + ") is too low. The minimum Rank to play in this battle is " + Ranks.RankNames[MinRank] + ".", ubs.Name); } } - if (ubs.QueueOrder <= 0) ubs.QueueOrder = ++QueueCounter; + if (ubs.QueueOrder <= 0) + { + ubs.QueueOrder = ++QueueCounter; + if IsInPreviousGame(ubs.Name) ubs.QueueOrder += 1000; + } } else { @@ -1122,6 +1134,16 @@ protected virtual async Task OnDedicatedExited(SpringBattleContext springBattleC //Initiate discussion time, then map vote, then start vote discussionTimer.Interval = (DiscussionSeconds - 1) * 1000; discussionTimer.Start(); + previousGamePlayers = springBattleContext.ActualPlayers.Select(x => x.Name); + foreach (var name in previousGamePlayers) + { + UserBattleStatus ubs; + if (Users.TryGetValue(name, out ubs)) + { + ubs.QueueOrder = -1; + ValidateBattleStatus(ubs); + } + } } } await CheckCloseBattle(); From b60d97574443877d769c250a2f3dde838127c23e Mon Sep 17 00:00:00 2001 From: GoogleFrog Date: Thu, 10 Jul 2025 13:57:34 +1000 Subject: [PATCH 03/13] Does build work at all? --- ZkLobbyServer/ServerBattle.cs | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/ZkLobbyServer/ServerBattle.cs b/ZkLobbyServer/ServerBattle.cs index 3d5d76920e..69b6e4734b 100644 --- a/ZkLobbyServer/ServerBattle.cs +++ b/ZkLobbyServer/ServerBattle.cs @@ -55,7 +55,6 @@ public class ServerBattle : Battle protected bool IsPollsBlocked => IsAutohost && DateTime.UtcNow < BlockPollsUntil; private List kickedPlayers = new List(); - private List previousGamePlayers = new List(); public List Debriefings { get; private set; } = new List(); private Timer pollTimer; @@ -208,13 +207,6 @@ public ConnectSpring GetConnectSpringStructure(string scriptPassword, bool isSpe }; } - public bool IsInPreviousGame(string name) - { - var inPrevious = false; - if (previousGamePlayers.Any(y => y.Name == name)) inPrevious = true; - return inPrevious; - } - public bool IsKicked(string name) { var kicked = false; @@ -1061,11 +1053,7 @@ public virtual void ValidateBattleStatus(UserBattleStatus ubs) SayBattle("Your Rank (" + Ranks.RankNames[ubs.LobbyUser.Rank] + ") is too low. The minimum Rank to play in this battle is " + Ranks.RankNames[MinRank] + ".", ubs.Name); } } - if (ubs.QueueOrder <= 0) - { - ubs.QueueOrder = ++QueueCounter; - if IsInPreviousGame(ubs.Name) ubs.QueueOrder += 1000; - } + if (ubs.QueueOrder <= 0) ubs.QueueOrder = ++QueueCounter; } else { @@ -1134,16 +1122,6 @@ protected virtual async Task OnDedicatedExited(SpringBattleContext springBattleC //Initiate discussion time, then map vote, then start vote discussionTimer.Interval = (DiscussionSeconds - 1) * 1000; discussionTimer.Start(); - previousGamePlayers = springBattleContext.ActualPlayers.Select(x => x.Name); - foreach (var name in previousGamePlayers) - { - UserBattleStatus ubs; - if (Users.TryGetValue(name, out ubs)) - { - ubs.QueueOrder = -1; - ValidateBattleStatus(ubs); - } - } } } await CheckCloseBattle(); From 62c6f54e502c9390872599791e6ca91068ff6889 Mon Sep 17 00:00:00 2001 From: GoogleFrog Date: Thu, 10 Jul 2025 14:02:45 +1000 Subject: [PATCH 04/13] Fixed version? Or maybe strings have to be read only. --- ZkLobbyServer/ServerBattle.cs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/ZkLobbyServer/ServerBattle.cs b/ZkLobbyServer/ServerBattle.cs index 69b6e4734b..6e8d833940 100644 --- a/ZkLobbyServer/ServerBattle.cs +++ b/ZkLobbyServer/ServerBattle.cs @@ -55,6 +55,7 @@ public class ServerBattle : Battle protected bool IsPollsBlocked => IsAutohost && DateTime.UtcNow < BlockPollsUntil; private List kickedPlayers = new List(); + private List previousGamePlayers = new List(); public List Debriefings { get; private set; } = new List(); private Timer pollTimer; @@ -207,6 +208,13 @@ public ConnectSpring GetConnectSpringStructure(string scriptPassword, bool isSpe }; } + public bool IsInPreviousGame(string name) + { + var inPrevious = false; + if (previousGamePlayers.Any(y => y == name)) inPrevious = true; + return inPrevious; + } + public bool IsKicked(string name) { var kicked = false; @@ -1053,7 +1061,11 @@ public virtual void ValidateBattleStatus(UserBattleStatus ubs) SayBattle("Your Rank (" + Ranks.RankNames[ubs.LobbyUser.Rank] + ") is too low. The minimum Rank to play in this battle is " + Ranks.RankNames[MinRank] + ".", ubs.Name); } } - if (ubs.QueueOrder <= 0) ubs.QueueOrder = ++QueueCounter; + if (ubs.QueueOrder <= 0) + { + ubs.QueueOrder = ++QueueCounter; + if IsInPreviousGame(ubs.Name) ubs.QueueOrder += 1000; + } } else { @@ -1122,6 +1134,16 @@ protected virtual async Task OnDedicatedExited(SpringBattleContext springBattleC //Initiate discussion time, then map vote, then start vote discussionTimer.Interval = (DiscussionSeconds - 1) * 1000; discussionTimer.Start(); + previousGamePlayers = springBattleContext.ActualPlayers.Select(x => x.Name); + foreach (var name in previousGamePlayers) + { + UserBattleStatus ubs; + if (Users.TryGetValue(name, out ubs)) + { + ubs.QueueOrder = -1; + ValidateBattleStatus(ubs); + } + } } } await CheckCloseBattle(); From 3f8c82596d285abbf0a6e6c48bc43e274797dfdf Mon Sep 17 00:00:00 2001 From: GoogleFrog Date: Thu, 10 Jul 2025 14:05:33 +1000 Subject: [PATCH 05/13] Start bisecting. --- ZkLobbyServer/ServerBattle.cs | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/ZkLobbyServer/ServerBattle.cs b/ZkLobbyServer/ServerBattle.cs index 6e8d833940..ba14ac6beb 100644 --- a/ZkLobbyServer/ServerBattle.cs +++ b/ZkLobbyServer/ServerBattle.cs @@ -211,7 +211,7 @@ public ConnectSpring GetConnectSpringStructure(string scriptPassword, bool isSpe public bool IsInPreviousGame(string name) { var inPrevious = false; - if (previousGamePlayers.Any(y => y == name)) inPrevious = true; + if (previousGamePlayers.Any(y => y.Name == name)) inPrevious = true; return inPrevious; } @@ -1134,16 +1134,6 @@ protected virtual async Task OnDedicatedExited(SpringBattleContext springBattleC //Initiate discussion time, then map vote, then start vote discussionTimer.Interval = (DiscussionSeconds - 1) * 1000; discussionTimer.Start(); - previousGamePlayers = springBattleContext.ActualPlayers.Select(x => x.Name); - foreach (var name in previousGamePlayers) - { - UserBattleStatus ubs; - if (Users.TryGetValue(name, out ubs)) - { - ubs.QueueOrder = -1; - ValidateBattleStatus(ubs); - } - } } } await CheckCloseBattle(); From b331721e4e9cec1ddab7d5caabed50447aa537a4 Mon Sep 17 00:00:00 2001 From: GoogleFrog Date: Thu, 10 Jul 2025 14:08:04 +1000 Subject: [PATCH 06/13] Test. --- ZkLobbyServer/ServerBattle.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZkLobbyServer/ServerBattle.cs b/ZkLobbyServer/ServerBattle.cs index ba14ac6beb..c990e0fbc1 100644 --- a/ZkLobbyServer/ServerBattle.cs +++ b/ZkLobbyServer/ServerBattle.cs @@ -211,7 +211,7 @@ public ConnectSpring GetConnectSpringStructure(string scriptPassword, bool isSpe public bool IsInPreviousGame(string name) { var inPrevious = false; - if (previousGamePlayers.Any(y => y.Name == name)) inPrevious = true; + if (previousGamePlayers.Any(y => y == name)) inPrevious = true; return inPrevious; } From a4b579545f3407e2912ec3f08dbbe0b4c540f4a9 Mon Sep 17 00:00:00 2001 From: GoogleFrog Date: Thu, 10 Jul 2025 14:11:18 +1000 Subject: [PATCH 07/13] Test --- ZkLobbyServer/ServerBattle.cs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/ZkLobbyServer/ServerBattle.cs b/ZkLobbyServer/ServerBattle.cs index c990e0fbc1..ee0cda9013 100644 --- a/ZkLobbyServer/ServerBattle.cs +++ b/ZkLobbyServer/ServerBattle.cs @@ -208,13 +208,6 @@ public ConnectSpring GetConnectSpringStructure(string scriptPassword, bool isSpe }; } - public bool IsInPreviousGame(string name) - { - var inPrevious = false; - if (previousGamePlayers.Any(y => y == name)) inPrevious = true; - return inPrevious; - } - public bool IsKicked(string name) { var kicked = false; From 5c750272c92429649ba672d278d6950efd5bd218 Mon Sep 17 00:00:00 2001 From: GoogleFrog Date: Thu, 10 Jul 2025 14:13:28 +1000 Subject: [PATCH 08/13] Oops, no way that was going to work. --- ZkLobbyServer/ServerBattle.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/ZkLobbyServer/ServerBattle.cs b/ZkLobbyServer/ServerBattle.cs index ee0cda9013..a210a3b2ec 100644 --- a/ZkLobbyServer/ServerBattle.cs +++ b/ZkLobbyServer/ServerBattle.cs @@ -1054,11 +1054,7 @@ public virtual void ValidateBattleStatus(UserBattleStatus ubs) SayBattle("Your Rank (" + Ranks.RankNames[ubs.LobbyUser.Rank] + ") is too low. The minimum Rank to play in this battle is " + Ranks.RankNames[MinRank] + ".", ubs.Name); } } - if (ubs.QueueOrder <= 0) - { - ubs.QueueOrder = ++QueueCounter; - if IsInPreviousGame(ubs.Name) ubs.QueueOrder += 1000; - } + if (ubs.QueueOrder <= 0) ubs.QueueOrder = ++QueueCounter; } else { From 6f6a2f2b50f512ddb1c8f3e2826c35cae2d2b96f Mon Sep 17 00:00:00 2001 From: GoogleFrog Date: Thu, 10 Jul 2025 14:15:11 +1000 Subject: [PATCH 09/13] Add checker. --- ZkLobbyServer/ServerBattle.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ZkLobbyServer/ServerBattle.cs b/ZkLobbyServer/ServerBattle.cs index a210a3b2ec..94a0877f42 100644 --- a/ZkLobbyServer/ServerBattle.cs +++ b/ZkLobbyServer/ServerBattle.cs @@ -208,6 +208,13 @@ public ConnectSpring GetConnectSpringStructure(string scriptPassword, bool isSpe }; } + public bool IsInPreviousGame(string name) + { + var inPrevious = false; + if (previousGamePlayers.Any(y => y == name)) inPrevious = true; + return inPrevious; + } + public bool IsKicked(string name) { var kicked = false; From e21f57dbb6587845be209edcaa3c3bf01cdf5915 Mon Sep 17 00:00:00 2001 From: GoogleFrog Date: Thu, 10 Jul 2025 14:17:41 +1000 Subject: [PATCH 10/13] Use checker. --- ZkLobbyServer/ServerBattle.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ZkLobbyServer/ServerBattle.cs b/ZkLobbyServer/ServerBattle.cs index 94a0877f42..1a0a710477 100644 --- a/ZkLobbyServer/ServerBattle.cs +++ b/ZkLobbyServer/ServerBattle.cs @@ -1061,7 +1061,11 @@ public virtual void ValidateBattleStatus(UserBattleStatus ubs) SayBattle("Your Rank (" + Ranks.RankNames[ubs.LobbyUser.Rank] + ") is too low. The minimum Rank to play in this battle is " + Ranks.RankNames[MinRank] + ".", ubs.Name); } } - if (ubs.QueueOrder <= 0) ubs.QueueOrder = ++QueueCounter; + if (ubs.QueueOrder <= 0) + { + ubs.QueueOrder = ++QueueCounter; + if IsInPreviousGame(ubs.Name) ubs.QueueOrder += 1000; + } } else { From 3ccef4d3bd34c0df9eec1eec7f9d805a28adbe42 Mon Sep 17 00:00:00 2001 From: GoogleFrog Date: Thu, 10 Jul 2025 14:19:34 +1000 Subject: [PATCH 11/13] Maybe this. --- ZkLobbyServer/ServerBattle.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZkLobbyServer/ServerBattle.cs b/ZkLobbyServer/ServerBattle.cs index 1a0a710477..8fdd5e2de4 100644 --- a/ZkLobbyServer/ServerBattle.cs +++ b/ZkLobbyServer/ServerBattle.cs @@ -1064,7 +1064,7 @@ public virtual void ValidateBattleStatus(UserBattleStatus ubs) if (ubs.QueueOrder <= 0) { ubs.QueueOrder = ++QueueCounter; - if IsInPreviousGame(ubs.Name) ubs.QueueOrder += 1000; + if (IsInPreviousGame(ubs.Name)) ubs.QueueOrder += 1000; } } else From a02bbb312eefefedc6ccef2d9c44df56ba1f30db Mon Sep 17 00:00:00 2001 From: GoogleFrog Date: Thu, 10 Jul 2025 14:21:32 +1000 Subject: [PATCH 12/13] Populate list. --- ZkLobbyServer/ServerBattle.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/ZkLobbyServer/ServerBattle.cs b/ZkLobbyServer/ServerBattle.cs index 8fdd5e2de4..55ef81a9d1 100644 --- a/ZkLobbyServer/ServerBattle.cs +++ b/ZkLobbyServer/ServerBattle.cs @@ -1134,6 +1134,7 @@ protected virtual async Task OnDedicatedExited(SpringBattleContext springBattleC //Initiate discussion time, then map vote, then start vote discussionTimer.Interval = (DiscussionSeconds - 1) * 1000; discussionTimer.Start(); + previousGamePlayers = springBattleContext.ActualPlayers.Select(x => x.Name).ToList(); } } await CheckCloseBattle(); From 0b6f6d1fb71c9c65066d74d54992099cdfc5deb8 Mon Sep 17 00:00:00 2001 From: GoogleFrog Date: Thu, 10 Jul 2025 14:24:26 +1000 Subject: [PATCH 13/13] And finally, update status? --- ZkLobbyServer/ServerBattle.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ZkLobbyServer/ServerBattle.cs b/ZkLobbyServer/ServerBattle.cs index 55ef81a9d1..d64ae2b004 100644 --- a/ZkLobbyServer/ServerBattle.cs +++ b/ZkLobbyServer/ServerBattle.cs @@ -1135,6 +1135,15 @@ protected virtual async Task OnDedicatedExited(SpringBattleContext springBattleC discussionTimer.Interval = (DiscussionSeconds - 1) * 1000; discussionTimer.Start(); previousGamePlayers = springBattleContext.ActualPlayers.Select(x => x.Name).ToList(); + foreach (var n in previousGamePlayers) + { + UserBattleStatus ubs; + if (Users.TryGetValue(n, out ubs)) + { + ubs.QueueOrder = -1; + ValidateBattleStatus(ubs); + } + } } } await CheckCloseBattle();