From 337034d734d3c334c299dc23312ea8e76d53a2d2 Mon Sep 17 00:00:00 2001 From: Aviu00 <93730715+Aviu00@users.noreply.github.com> Date: Thu, 8 Feb 2024 18:43:17 +0900 Subject: [PATCH] Fix gulag & tweak ratio (#36) * - tweak: Tweak gulag ratio * - fix: Fix gulag. --- .../Administration/Commands/PardonCommand.cs | 5 +++ .../Administration/Managers/BanManager.cs | 37 ++++++++++++++++++- .../Administration/Managers/IBanManager.cs | 3 ++ .../_Miracle/GulagSystem/GulagSystem.cs | 11 +++++- .../PandaSocket/Commands/PandaUnbanCommand.cs | 5 +++ Content.Shared/_Miracle/Cvars/MiracleCvars.cs | 2 +- 6 files changed, 60 insertions(+), 3 deletions(-) diff --git a/Content.Server/Administration/Commands/PardonCommand.cs b/Content.Server/Administration/Commands/PardonCommand.cs index 9cbaaece31..d7c9654c6d 100644 --- a/Content.Server/Administration/Commands/PardonCommand.cs +++ b/Content.Server/Administration/Commands/PardonCommand.cs @@ -1,4 +1,5 @@ using System.Text; +using Content.Server.Administration.Managers; using Content.Server.Database; using Content.Shared.Administration; using Robust.Shared.Console; @@ -16,6 +17,7 @@ namespace Content.Server.Administration.Commands { var player = shell.Player; var dbMan = IoCManager.Resolve(); + var banManager = IoCManager.Resolve(); if (args.Length != 1) { @@ -37,6 +39,9 @@ namespace Content.Server.Administration.Commands return; } + if (ban.UserId.HasValue) + banManager.RemoveCachedServerBan(ban.UserId.Value, banId); + if (ban.Unban != null) { var response = new StringBuilder("This ban has already been pardoned"); diff --git a/Content.Server/Administration/Managers/BanManager.cs b/Content.Server/Administration/Managers/BanManager.cs index 12daf9addd..56f913a38e 100644 --- a/Content.Server/Administration/Managers/BanManager.cs +++ b/Content.Server/Administration/Managers/BanManager.cs @@ -207,7 +207,26 @@ public sealed class BanManager : IBanManager, IPostInjectInit if (banDef.UserId.HasValue) { - _cachedServerBans.GetOrNew(banDef.UserId.Value).Add(banDef); + var banlist = await _db.GetServerBansAsync(addressRange?.Item1, target, hwid, false); + if (banlist.Count > 0 && banlist[^1].Id.HasValue) + { + var banDefWithId = new ServerBanDef( + banlist[^1].Id, + banDef.UserId, + banDef.Address, + banDef.HWId, + banDef.BanTime, + banDef.ExpirationTime, + banDef.RoundId, + banDef.PlaytimeAtNote, + banDef.Reason, + banDef.Severity, + banDef.BanningAdmin, + banDef.Unban, + banDef.ServerName); + + _cachedServerBans.GetOrNew(banDef.UserId.Value).Add(banDefWithId); + } } // If we're not banning a player we don't care about disconnecting people @@ -241,6 +260,22 @@ public sealed class BanManager : IBanManager, IPostInjectInit return new HashSet(); } + + public void RemoveCachedServerBan(NetUserId userId, int? id) + { + if (_cachedServerBans.TryGetValue(userId, out var bans)) + { + bans.RemoveWhere(ban => ban.Id == id); + } + } + + public void AddCachedServerBan(ServerBanDef banDef) + { + if (banDef.UserId == null) + return; + + _cachedServerBans.GetOrNew(banDef.UserId.Value).Add(banDef); + } //Miracle edit end #region Job Bans diff --git a/Content.Server/Administration/Managers/IBanManager.cs b/Content.Server/Administration/Managers/IBanManager.cs index aa3d6be575..ed029fb920 100644 --- a/Content.Server/Administration/Managers/IBanManager.cs +++ b/Content.Server/Administration/Managers/IBanManager.cs @@ -30,6 +30,9 @@ public interface IBanManager public HashSet? GetJobBans(NetUserId playerUserId); public HashSet GetServerBans(NetUserId userId); // Miracle edit + public void RemoveCachedServerBan(NetUserId userId, int? id); // Miracle edit + + public void AddCachedServerBan(ServerBanDef banDef); // Miracle edit /// /// Creates a job ban for the specified target, username or GUID diff --git a/Content.Server/_Miracle/GulagSystem/GulagSystem.cs b/Content.Server/_Miracle/GulagSystem/GulagSystem.cs index ff1dc01524..820df1234d 100644 --- a/Content.Server/_Miracle/GulagSystem/GulagSystem.cs +++ b/Content.Server/_Miracle/GulagSystem/GulagSystem.cs @@ -43,7 +43,7 @@ namespace Content.Server._Miracle.GulagSystem; public sealed partial class GulagSystem : SharedGulagSystem { - //1 second = 10 points + //1 second = 0.01 points [Dependency] private readonly AdminSystem _adminSystem = default!; [Dependency] private readonly IBanManager _banManager = default!; [Dependency] private readonly BiomeSystem _biome = default!; @@ -382,7 +382,16 @@ public sealed partial class GulagSystem : SharedGulagSystem var newExpirationTime = banDef.ExpirationTime!.Value.DateTime - ConvertPointsToTime(points); _db.EditServerBan(banDef.Id!.Value, banDef.Reason, banDef.Severity, newExpirationTime, banDef.UserId!.Value, DateTime.Now); + + // Update time + _banManager.RemoveCachedServerBan(banDef.UserId.Value, banDef.Id.Value); + _banManager.AddCachedServerBan(new ServerBanDef( + banDef.Id, banDef.UserId, banDef.Address, banDef.HWId, banDef.BanTime, newExpirationTime, + banDef.RoundId, banDef.PlaytimeAtNote, banDef.Reason, banDef.Severity, banDef.BanningAdmin, + banDef.Unban, banDef.ServerName)); } + + _pointsPerPlayer.Clear(); _activeMap = null!; _mapEntity = null!; diff --git a/Content.Server/_White/PandaSocket/Commands/PandaUnbanCommand.cs b/Content.Server/_White/PandaSocket/Commands/PandaUnbanCommand.cs index 2c7e43c4e4..c83ecb5bc6 100644 --- a/Content.Server/_White/PandaSocket/Commands/PandaUnbanCommand.cs +++ b/Content.Server/_White/PandaSocket/Commands/PandaUnbanCommand.cs @@ -2,6 +2,7 @@ using Content.Server.Database; using Content.Server._White.PandaSocket.Interfaces; using Content.Server._White.PandaSocket.Main; +using Content.Server.Administration.Managers; namespace Content.Server._White.PandaSocket.Commands; @@ -15,6 +16,7 @@ public sealed class PandaUnbanCommand : IPandaCommand var dbMan = IoCManager.Resolve(); var locator = IoCManager.Resolve(); + var banManager = IoCManager.Resolve(); IoCManager.InjectDependencies(this); var located = await locator.LookupIdByNameOrIdAsync(message.ACkey!); @@ -41,6 +43,9 @@ public sealed class PandaUnbanCommand : IPandaCommand return; } + if (ban.UserId.HasValue) + banManager.RemoveCachedServerBan(ban.UserId.Value, banId); + await dbMan.AddServerUnbanAsync(new ServerUnbanDef(banId, player, DateTimeOffset.Now)); UtkaSendResponse(true, context); diff --git a/Content.Shared/_Miracle/Cvars/MiracleCvars.cs b/Content.Shared/_Miracle/Cvars/MiracleCvars.cs index 1dabe6dbb1..a9b43f46a0 100644 --- a/Content.Shared/_Miracle/Cvars/MiracleCvars.cs +++ b/Content.Shared/_Miracle/Cvars/MiracleCvars.cs @@ -8,5 +8,5 @@ public sealed class MiracleCvars // / = // 100 / 10 = 10 public static readonly CVarDef GulagPointsToTimeRatio = CVarDef.Create("miracle.gulag.points_to_time", - 10.0d, CVar.SERVERONLY, " / = "); + 0.01d, CVar.SERVERONLY, " / = "); }