mirror of
https://github.com/daffyyyy/CS2-SimpleAdmin.git
synced 2026-02-17 18:39:07 +00:00
1.7.2a
- Temp fix for player.Disconnect - Fix for no reasons - Fix for no time used - Added check for hibernation - Some changes in unwarn action
This commit is contained in:
@@ -19,7 +19,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)");
|
public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)");
|
||||||
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
|
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
|
||||||
public override string ModuleAuthor => "daffyy & Dliix66";
|
public override string ModuleAuthor => "daffyy & Dliix66";
|
||||||
public override string ModuleVersion => "1.7.1a";
|
public override string ModuleVersion => "1.7.2a";
|
||||||
|
|
||||||
public override void Load(bool hotReload)
|
public override void Load(bool hotReload)
|
||||||
{
|
{
|
||||||
@@ -56,6 +56,8 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
|
|
||||||
public override void OnAllPluginsLoaded(bool hotReload)
|
public override void OnAllPluginsLoaded(bool hotReload)
|
||||||
{
|
{
|
||||||
|
new ServerManager().CheckHibernationStatus();
|
||||||
|
|
||||||
AddTimer(3.0f, () => ReloadAdmins(null));
|
AddTimer(3.0f, () => ReloadAdmins(null));
|
||||||
|
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -30,9 +30,12 @@ public partial class CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
var reason = command.ArgCount >= 3
|
var reason = command.ArgCount >= 3
|
||||||
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
|
|
||||||
var time = Helper.ParsePenaltyTime(command.GetArg(2));
|
var time = Helper.ParsePenaltyTime(command.GetArg(2));
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
@@ -134,8 +137,10 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
var steamid = steamId.SteamId64.ToString();
|
var steamid = steamId.SteamId64.ToString();
|
||||||
var reason = command.ArgCount >= 3
|
var reason = command.ArgCount >= 3
|
||||||
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
var time = Math.Max(0, Helper.ParsePenaltyTime(command.GetArg(2)));
|
var time = Math.Max(0, Helper.ParsePenaltyTime(command.GetArg(2)));
|
||||||
|
|
||||||
@@ -195,8 +200,10 @@ public partial class CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
var reason = command.ArgCount >= 3
|
var reason = command.ArgCount >= 3
|
||||||
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
var time = Math.Max(0, Helper.ParsePenaltyTime(command.GetArg(2)));
|
var time = Math.Max(0, Helper.ParsePenaltyTime(command.GetArg(2)));
|
||||||
|
|
||||||
@@ -264,8 +271,10 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
var pattern = command.GetArg(1);
|
var pattern = command.GetArg(1);
|
||||||
var reason = command.ArgCount >= 2
|
var reason = command.ArgCount >= 2
|
||||||
? string.Join(" ", Enumerable.Range(2, command.ArgCount - 2).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(2, command.ArgCount - 2).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
Task.Run(async () => await BanManager.UnbanPlayer(pattern, callerSteamId, reason));
|
Task.Run(async () => await BanManager.UnbanPlayer(pattern, callerSteamId, reason));
|
||||||
|
|
||||||
@@ -297,8 +306,10 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
var time = Math.Max(0, Helper.ParsePenaltyTime(command.GetArg(2)));
|
var time = Math.Max(0, Helper.ParsePenaltyTime(command.GetArg(2)));
|
||||||
var reason = command.ArgCount >= 3
|
var reason = command.ArgCount >= 3
|
||||||
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -782,10 +782,12 @@ public partial class CS2_SimpleAdmin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var reason = command.ArgCount >= 2
|
var reason = command.ArgCount >= 2
|
||||||
? string.Join(" ", Enumerable.Range(2, command.ArgCount - 2).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(2, command.ArgCount - 2).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
if (!player.IsValid)
|
if (!player.IsValid)
|
||||||
|
|||||||
@@ -28,9 +28,11 @@ public partial class CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
var reason = command.ArgCount >= 3
|
var reason = command.ArgCount >= 3
|
||||||
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
var time = Helper.ParsePenaltyTime(command.GetArg(2));
|
var time = Helper.ParsePenaltyTime(command.GetArg(2));
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
@@ -124,8 +126,10 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
var steamid = steamId.SteamId64.ToString();
|
var steamid = steamId.SteamId64.ToString();
|
||||||
var reason = command.ArgCount >= 3
|
var reason = command.ArgCount >= 3
|
||||||
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
var time = Math.Max(0, Helper.ParsePenaltyTime(command.GetArg(2)));
|
var time = Math.Max(0, Helper.ParsePenaltyTime(command.GetArg(2)));
|
||||||
if (!CheckValidMute(caller, time)) return;
|
if (!CheckValidMute(caller, time)) return;
|
||||||
@@ -175,9 +179,11 @@ public partial class CS2_SimpleAdmin
|
|||||||
var callerSteamId = caller?.SteamID.ToString() ?? _localizer?["sa_console"] ?? "Console";
|
var callerSteamId = caller?.SteamID.ToString() ?? _localizer?["sa_console"] ?? "Console";
|
||||||
var pattern = command.GetArg(1);
|
var pattern = command.GetArg(1);
|
||||||
var reason = command.ArgCount >= 2
|
var reason = command.ArgCount >= 2
|
||||||
? string.Join(" ", Enumerable.Range(2, command.ArgCount - 2).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(2, command.ArgCount - 2).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
if (pattern.Length <= 1)
|
if (pattern.Length <= 1)
|
||||||
{
|
{
|
||||||
command.ReplyToCommand($"Too short pattern to search.");
|
command.ReplyToCommand($"Too short pattern to search.");
|
||||||
@@ -252,9 +258,11 @@ public partial class CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
var reason = command.ArgCount >= 3
|
var reason = command.ArgCount >= 3
|
||||||
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
var time = Helper.ParsePenaltyTime(command.GetArg(2));
|
var time = Helper.ParsePenaltyTime(command.GetArg(2));
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
@@ -351,8 +359,10 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
var steamid = steamId.SteamId64.ToString();
|
var steamid = steamId.SteamId64.ToString();
|
||||||
var reason = command.ArgCount >= 3
|
var reason = command.ArgCount >= 3
|
||||||
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
var time = Math.Max(0, Helper.ParsePenaltyTime(command.GetArg(2)));
|
var time = Math.Max(0, Helper.ParsePenaltyTime(command.GetArg(2)));
|
||||||
if (!CheckValidMute(caller, time)) return;
|
if (!CheckValidMute(caller, time)) return;
|
||||||
@@ -402,9 +412,11 @@ public partial class CS2_SimpleAdmin
|
|||||||
var callerSteamId = caller?.SteamID.ToString() ?? _localizer?["sa_console"] ?? "Console";
|
var callerSteamId = caller?.SteamID.ToString() ?? _localizer?["sa_console"] ?? "Console";
|
||||||
var pattern = command.GetArg(1);
|
var pattern = command.GetArg(1);
|
||||||
var reason = command.ArgCount >= 2
|
var reason = command.ArgCount >= 2
|
||||||
? string.Join(" ", Enumerable.Range(2, command.ArgCount - 2).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(2, command.ArgCount - 2).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
if (pattern.Length <= 1)
|
if (pattern.Length <= 1)
|
||||||
{
|
{
|
||||||
command.ReplyToCommand("Too short pattern to search.");
|
command.ReplyToCommand("Too short pattern to search.");
|
||||||
@@ -481,8 +493,10 @@ public partial class CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
var reason = command.ArgCount >= 3
|
var reason = command.ArgCount >= 3
|
||||||
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
var time = Helper.ParsePenaltyTime(command.GetArg(2));
|
var time = Helper.ParsePenaltyTime(command.GetArg(2));
|
||||||
|
|
||||||
@@ -578,8 +592,10 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
var steamid = steamId.SteamId64.ToString();
|
var steamid = steamId.SteamId64.ToString();
|
||||||
var reason = command.ArgCount >= 3
|
var reason = command.ArgCount >= 3
|
||||||
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(3, command.ArgCount - 3).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
var time = Math.Max(0, Helper.ParsePenaltyTime(command.GetArg(2)));
|
var time = Math.Max(0, Helper.ParsePenaltyTime(command.GetArg(2)));
|
||||||
if (!CheckValidMute(caller, time)) return;
|
if (!CheckValidMute(caller, time)) return;
|
||||||
@@ -629,9 +645,11 @@ public partial class CS2_SimpleAdmin
|
|||||||
var callerSteamId = caller?.SteamID.ToString() ?? _localizer?["sa_console"] ?? "Console";
|
var callerSteamId = caller?.SteamID.ToString() ?? _localizer?["sa_console"] ?? "Console";
|
||||||
var pattern = command.GetArg(1);
|
var pattern = command.GetArg(1);
|
||||||
var reason = command.ArgCount >= 2
|
var reason = command.ArgCount >= 2
|
||||||
? string.Join(" ", Enumerable.Range(2, command.ArgCount - 2).Select(command.GetArg))
|
? string.Join(" ", Enumerable.Range(2, command.ArgCount - 2).Select(command.GetArg)).Trim()
|
||||||
: _localizer?["sa_unknown"] ?? "Unknown";
|
: _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
|
reason = string.IsNullOrWhiteSpace(reason) ? _localizer?["sa_unknown"] ?? "Unknown" : reason;
|
||||||
|
|
||||||
if (pattern.Length <= 1)
|
if (pattern.Length <= 1)
|
||||||
{
|
{
|
||||||
command.ReplyToCommand("Too short pattern to search.");
|
command.ReplyToCommand("Too short pattern to search.");
|
||||||
|
|||||||
@@ -156,12 +156,16 @@ internal static class Helper
|
|||||||
if (!player.IsValid || player.IsHLTV)
|
if (!player.IsValid || player.IsHLTV)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
player.Disconnect(reason);
|
Server.ExecuteCommand($"kickid {player.UserId}");
|
||||||
|
|
||||||
|
// player.Disconnect(reason); Broken after last update
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.Disconnect(reason);
|
Server.ExecuteCommand($"kickid {player.UserId}");
|
||||||
|
|
||||||
|
player.Disconnect(reason); // Broken after last update
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CS2_SimpleAdmin.UnlockedCommands && reason == NetworkDisconnectionReason.NETWORK_DISCONNECT_REJECT_BANNED)
|
if (CS2_SimpleAdmin.UnlockedCommands && reason == NetworkDisconnectionReason.NETWORK_DISCONNECT_REJECT_BANNED)
|
||||||
@@ -196,13 +200,26 @@ internal static class Helper
|
|||||||
{
|
{
|
||||||
if (!player.IsValid || player.IsHLTV)
|
if (!player.IsValid || player.IsHLTV)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
player.Disconnect(reason);
|
// if (!string.IsNullOrEmpty(reason))
|
||||||
|
// {
|
||||||
|
// var escapeChars = reason.IndexOfAny([';', '|']);
|
||||||
|
//
|
||||||
|
// if (escapeChars != -1)
|
||||||
|
// {
|
||||||
|
// reason = reason[..escapeChars];
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
Server.ExecuteCommand($"kickid {player.UserId}");
|
||||||
|
// player.Disconnect(reason); // Broken after last update
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.Disconnect(reason);
|
Server.ExecuteCommand($"kickid {player.UserId}");
|
||||||
|
|
||||||
|
// player.Disconnect(reason); // Broken after last update
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CS2_SimpleAdmin.UnlockedCommands && reason == NetworkDisconnectionReason.NETWORK_DISCONNECT_REJECT_BANNED)
|
if (CS2_SimpleAdmin.UnlockedCommands && reason == NetworkDisconnectionReason.NETWORK_DISCONNECT_REJECT_BANNED)
|
||||||
@@ -223,12 +240,15 @@ internal static class Helper
|
|||||||
|
|
||||||
public static int ParsePenaltyTime(string time)
|
public static int ParsePenaltyTime(string time)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(time))
|
if (string.IsNullOrWhiteSpace(time) || !time.Any(char.IsDigit))
|
||||||
{
|
{
|
||||||
CS2_SimpleAdmin._logger?.LogError("Time string cannot be null or empty.");
|
// CS2_SimpleAdmin._logger?.LogError("Time string cannot be null or empty.");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (time.Equals($"0"))
|
||||||
|
return 0;
|
||||||
|
|
||||||
var timeUnits = new Dictionary<string, int>
|
var timeUnits = new Dictionary<string, int>
|
||||||
{
|
{
|
||||||
{ "m", 1 }, // Minute
|
{ "m", 1 }, // Minute
|
||||||
@@ -265,8 +285,8 @@ internal static class Helper
|
|||||||
throw new ArgumentException($"Invalid time unit '{unit}' in time string.", nameof(time));
|
throw new ArgumentException($"Invalid time unit '{unit}' in time string.", nameof(time));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return totalMinutes;
|
return totalMinutes > 0 ? totalMinutes : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void PrintToCenterAll(string message)
|
public static void PrintToCenterAll(string message)
|
||||||
|
|||||||
@@ -315,53 +315,72 @@ public class PermissionManager(Database.Database? database)
|
|||||||
{
|
{
|
||||||
List<(string identity, string name, List<string> flags, int immunity, DateTime? ends)> allPlayers = await GetAllPlayersFlags();
|
List<(string identity, string name, List<string> flags, int immunity, DateTime? ends)> allPlayers = await GetAllPlayersFlags();
|
||||||
var validPlayers = allPlayers
|
var validPlayers = allPlayers
|
||||||
.Where(player => SteamID.TryParse(player.identity, out _)) // Filter invalid SteamID
|
.Where(player => SteamID.TryParse(player.identity, out _))
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
/*
|
// foreach (var player in allPlayers)
|
||||||
foreach (var player in allPlayers)
|
// {
|
||||||
{
|
// var (steamId, name, flags, immunity, ends) = player;
|
||||||
var (steamId, name, flags, immunity, ends) = player;
|
//
|
||||||
|
// Console.WriteLine($"Player SteamID: {steamId}");
|
||||||
// Print or process each item
|
// Console.WriteLine($"Player Name: {name}");
|
||||||
Console.WriteLine($"Player SteamID: {steamId}");
|
// Console.WriteLine($"Flags: {string.Join(", ", flags)}");
|
||||||
Console.WriteLine($"Player Name: {name}");
|
// Console.WriteLine($"Immunity: {immunity}");
|
||||||
Console.WriteLine($"Flags: {string.Join(", ", flags)}");
|
// Console.WriteLine($"Ends: {(ends.HasValue ? ends.Value.ToString("yyyy-MM-dd HH:mm:ss") : "Never")}");
|
||||||
Console.WriteLine($"Immunity: {immunity}");
|
// Console.WriteLine();
|
||||||
Console.WriteLine($"Ends: {(ends.HasValue ? ends.Value.ToString("yyyy-MM-dd HH:mm:ss") : "Never")}");
|
// }
|
||||||
Console.WriteLine(); // New line for better readability
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
var jsonData = validPlayers
|
var jsonData = validPlayers
|
||||||
.Select(player =>
|
.GroupBy(player => player.name) // Group by player name
|
||||||
{
|
.ToDictionary(
|
||||||
SteamID.TryParse(player.identity, out var steamId);
|
group => group.Key, // Use the player name as the key
|
||||||
|
group =>
|
||||||
|
{
|
||||||
|
// Consolidate data for players with the same name
|
||||||
|
var consolidatedData = group.Aggregate(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
identity = string.Empty,
|
||||||
|
immunity = 0,
|
||||||
|
flags = new List<string>(),
|
||||||
|
groups = new List<string>()
|
||||||
|
},
|
||||||
|
(acc, player) =>
|
||||||
|
{
|
||||||
|
// Merge identities and use the latest or first non-null identity
|
||||||
|
if (string.IsNullOrEmpty(acc.identity) && !string.IsNullOrEmpty(player.identity))
|
||||||
|
{
|
||||||
|
acc = acc with { identity = player.identity };
|
||||||
|
}
|
||||||
|
|
||||||
// Update cache if SteamID is valid and not already cached
|
// Combine immunities by taking the maximum value
|
||||||
if (steamId != null && !AdminCache.ContainsKey(steamId))
|
acc = acc with { immunity = Math.Max(acc.immunity, player.immunity) };
|
||||||
{
|
|
||||||
AdminCache.TryAdd(steamId, player.ends);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create an anonymous object with player data
|
// Combine flags and groups, ensuring no duplicates
|
||||||
return new
|
acc = acc with
|
||||||
{
|
{
|
||||||
playerName = player.name,
|
flags = acc.flags.Concat(player.flags.Where(flag => flag.StartsWith($"@"))).Distinct().ToList(),
|
||||||
playerData = new
|
groups = acc.groups.Concat(player.flags.Where(flag => flag.StartsWith($"#"))).Distinct().ToList()
|
||||||
{
|
};
|
||||||
player.identity,
|
|
||||||
player.immunity,
|
|
||||||
flags = player.flags.Where(flag => flag.StartsWith("@")).ToList(),
|
|
||||||
groups = player.flags.Where(flag => flag.StartsWith("#")).ToList()
|
|
||||||
}
|
|
||||||
};
|
|
||||||
})
|
|
||||||
.ToDictionary(item => item.playerName, item => (object)item.playerData);
|
|
||||||
|
|
||||||
|
return acc;
|
||||||
|
});
|
||||||
|
|
||||||
|
foreach (var player in group)
|
||||||
|
{
|
||||||
|
SteamID.TryParse(player.identity, out var steamId);
|
||||||
|
if (steamId != null && !AdminCache.ContainsKey(steamId))
|
||||||
|
{
|
||||||
|
AdminCache.TryAdd(steamId, player.ends);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (object)consolidatedData;
|
||||||
|
});
|
||||||
|
|
||||||
var json = JsonConvert.SerializeObject(jsonData, Formatting.Indented);
|
var json = JsonConvert.SerializeObject(jsonData, Formatting.Indented);
|
||||||
|
|
||||||
var filePath = Path.Combine(CS2_SimpleAdmin.Instance.ModuleDirectory, "data", "admins.json");
|
var filePath = Path.Combine(CS2_SimpleAdmin.Instance.ModuleDirectory, "data", "admins.json");
|
||||||
|
|
||||||
await File.WriteAllTextAsync(filePath, json);
|
await File.WriteAllTextAsync(filePath, json);
|
||||||
|
|
||||||
//await File.WriteAllTextAsync(CS2_SimpleAdmin.Instance.ModuleDirectory + "/data/admins.json", json);
|
//await File.WriteAllTextAsync(CS2_SimpleAdmin.Instance.ModuleDirectory + "/data/admins.json", json);
|
||||||
|
|||||||
@@ -9,6 +9,16 @@ public class ServerManager
|
|||||||
{
|
{
|
||||||
private int _getIpTryCount;
|
private int _getIpTryCount;
|
||||||
|
|
||||||
|
public void CheckHibernationStatus()
|
||||||
|
{
|
||||||
|
ConVar? convar = ConVar.Find("sv_hibernate_when_empty");
|
||||||
|
|
||||||
|
if (convar == null || !convar.GetPrimitiveValue<bool>())
|
||||||
|
return;
|
||||||
|
|
||||||
|
CS2_SimpleAdmin._logger?.LogError("Detected setting \"sv_hibernate_when_empty true\", set false to make plugin work properly");
|
||||||
|
}
|
||||||
|
|
||||||
public void LoadServerData()
|
public void LoadServerData()
|
||||||
{
|
{
|
||||||
CS2_SimpleAdmin.Instance.AddTimer(1.2f, () =>
|
CS2_SimpleAdmin.Instance.AddTimer(1.2f, () =>
|
||||||
|
|||||||
@@ -174,14 +174,32 @@ internal class WarnManager(Database.Database? database)
|
|||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
var sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode
|
var sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode
|
||||||
? "UPDATE sa_warns SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND player_steamid = @steamid AND id = (SELECT MAX(id) FROM sa_warns WHERE player_steamid = @steamid AND status = 'ACTIVE')"
|
? """
|
||||||
: "UPDATE sa_warns SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND player_steamid = @steamid AND id = (SELECT MAX(id) FROM sa_warns WHERE player_steamid = @steamid AND status = 'ACTIVE' AND server_id = @serverid)";
|
UPDATE sa_warns
|
||||||
|
JOIN (
|
||||||
|
SELECT MAX(id) AS max_id
|
||||||
|
FROM sa_warns
|
||||||
|
WHERE player_steamid = @steamid AND status = 'ACTIVE'
|
||||||
|
) AS subquery ON sa_warns.id = subquery.max_id
|
||||||
|
SET sa_warns.status = 'EXPIRED'
|
||||||
|
WHERE sa_warns.status = 'ACTIVE' AND sa_warns.player_steamid = @steamid;
|
||||||
|
"""
|
||||||
|
: """
|
||||||
|
UPDATE sa_warns
|
||||||
|
JOIN (
|
||||||
|
SELECT MAX(id) AS max_id
|
||||||
|
FROM sa_warns
|
||||||
|
WHERE player_steamid = @steamid AND status = 'ACTIVE' AND server_id = @serverid
|
||||||
|
) AS subquery ON sa_warns.id = subquery.max_id
|
||||||
|
SET sa_warns.status = 'EXPIRED'
|
||||||
|
WHERE sa_warns.status = 'ACTIVE' AND sa_warns.player_steamid = @steamid AND sa_warns.server_id = @serverid;
|
||||||
|
""";
|
||||||
|
|
||||||
await connection.ExecuteAsync(sql, new { steamid = playerPattern, serverid = CS2_SimpleAdmin.ServerId });
|
await connection.ExecuteAsync(sql, new { steamid = playerPattern, serverid = CS2_SimpleAdmin.ServerId });
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
CS2_SimpleAdmin._logger?.LogCritical($"Unable to remove last warn + {ex}");
|
CS2_SimpleAdmin._logger?.LogCritical("Unable to remove last warn {exception}", ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
1.7.1a
|
1.7.2a
|
||||||
Reference in New Issue
Block a user