- Added custom command to menu
- Better ungag/unmute/unsilence handling
- Fixed css_psay from console
This commit is contained in:
Dawid Bepierszcz
2024-03-02 22:16:38 +01:00
parent 7d5166cf4b
commit da6fb2fc22
8 changed files with 87 additions and 53 deletions

View File

@@ -38,7 +38,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
public override string ModuleName => "CS2-SimpleAdmin";
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
public override string ModuleAuthor => "daffyy & Dliix66";
public override string ModuleVersion => "1.3.4a";
public override string ModuleVersion => "1.3.5a";
public CS2_SimpleAdminConfig Config { get; set; } = new();

View File

@@ -78,6 +78,8 @@ namespace CS2_SimpleAdmin
[RequiresPermissions("@css/chat")]
public void OnAdminPrivateSayCommand(CCSPlayerController? caller, CommandInfo command)
{
string callerName = caller == null ? "Console" : caller.PlayerName;
TargetResult? targets = GetTarget(command);
if (targets == null) return;
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => player != null && player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
@@ -92,7 +94,7 @@ namespace CS2_SimpleAdmin
playersToTarget.ForEach(player =>
{
player.PrintToChat(StringExtensions.ReplaceColorTags($"({caller!.PlayerName}) {utf8String}"));
player.PrintToChat(StringExtensions.ReplaceColorTags($"({callerName}) {utf8String}"));
});
command.ReplyToCommand(StringExtensions.ReplaceColorTags($" Private message sent!"));

View File

@@ -29,9 +29,11 @@ namespace CS2_SimpleAdmin
using var connection = await _database.GetConnectionAsync();
var commandText = "ALTER TABLE `sa_mutes` CHANGE `type` `type` ENUM('GAG','MUTE', 'SILENCE', '') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'GAG';";
using var command = connection.CreateCommand();
command.CommandText = commandText;
await command.ExecuteNonQueryAsync();
using var commandSql = connection.CreateCommand();
commandSql.CommandText = commandText;
await commandSql.ExecuteNonQueryAsync();
command.ReplyToCommand("Successfully updated the database");
}
catch (Exception ex)
{
@@ -42,7 +44,7 @@ namespace CS2_SimpleAdmin
[ConsoleCommand("css_admin")]
[RequiresPermissions("@css/generic")]
[CommandHelper(minArgs: 0, usage: "", whoCanExecute: CommandUsage.CLIENT_ONLY)]
[CommandHelper(whoCanExecute: CommandUsage.CLIENT_ONLY)]
public void OnAdminCommand(CCSPlayerController? caller, CommandInfo command)
{
if (caller == null || caller.IsValid == false)

View File

@@ -260,6 +260,8 @@ namespace CS2_SimpleAdmin
{
if (_database == null) return;
string callerName = caller == null ? "Console" : caller.PlayerName;
string foundPlayerName = string.Empty;
string foundPlayerSteamId64 = string.Empty;
if (command.GetArg(1).Length <= 1)
{
@@ -282,11 +284,6 @@ namespace CS2_SimpleAdmin
PlayerPenaltyManager playerPenaltyManager = new PlayerPenaltyManager();
Task.Run(async () =>
{
await _muteManager.UnmutePlayer(pattern, 0); // Unmute by type 0 (gag)
});
if (Helper.IsValidSteamID64(pattern))
{
List<CCSPlayerController> matches = Helper.GetPlayerFromSteamid64(pattern);
@@ -301,6 +298,8 @@ namespace CS2_SimpleAdmin
Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}");
found = true;
foundPlayerName = player.PlayerName;
foundPlayerSteamId64 = player.SteamID.ToString();
}
}
}
@@ -320,10 +319,24 @@ namespace CS2_SimpleAdmin
pattern = player!.SteamID.ToString();
found = true;
foundPlayerName = player.PlayerName;
foundPlayerSteamId64 = player.SteamID.ToString();
}
}
}
if (found)
{
Task.Run(async () => { await _muteManager.UnmutePlayer(foundPlayerSteamId64, 0); }); // Unmute by type 0 (gag)
command.ReplyToCommand($"Ungaged player {foundPlayerName}.");
}
else
{
Task.Run(async () => { await _muteManager.UnmutePlayer(pattern, 0); }); // Unmute by type 0 (gag)
command.ReplyToCommand($"Ungaged offline player with pattern {pattern}.");
}
/*
TargetResult? targets = GetTarget(command);
if (targets == null) return;
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => player != null && player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
@@ -352,7 +365,7 @@ namespace CS2_SimpleAdmin
command.ReplyToCommand($"Ungaged player with pattern {pattern}.");
return;
}
*/
}
[ConsoleCommand("css_mute")]
@@ -591,6 +604,8 @@ namespace CS2_SimpleAdmin
{
if (_database == null) return;
string callerName = caller == null ? "Console" : caller.PlayerName;
string foundPlayerName = string.Empty;
string foundPlayerSteamId64 = string.Empty;
if (command.GetArg(1).Length <= 1)
{
@@ -611,11 +626,6 @@ namespace CS2_SimpleAdmin
MuteManager _muteManager = new(_database);
PlayerPenaltyManager playerPenaltyManager = new PlayerPenaltyManager();
Task.Run(async () =>
{
await _muteManager.UnmutePlayer(pattern, 1); // Unmute by type 1 (mute)
});
if (Helper.IsValidSteamID64(pattern))
{
List<CCSPlayerController> matches = Helper.GetPlayerFromSteamid64(pattern);
@@ -627,6 +637,8 @@ namespace CS2_SimpleAdmin
playerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Mute);
player.VoiceFlags = VoiceFlags.Normal;
found = true;
foundPlayerName = player.PlayerName;
foundPlayerSteamId64 = player.SteamID.ToString();
}
}
}
@@ -642,16 +654,24 @@ namespace CS2_SimpleAdmin
player.VoiceFlags = VoiceFlags.Normal;
pattern = player.SteamID.ToString();
found = true;
foundPlayerName = player.PlayerName;
foundPlayerSteamId64 = player.SteamID.ToString();
}
}
}
if (found)
{
command.ReplyToCommand($"Unmuted player with pattern {pattern}.");
return;
Task.Run(async () => { await _muteManager.UnmutePlayer(foundPlayerSteamId64, 1); }); // Unmute by type 1 (mute)
command.ReplyToCommand($"Unmuted player {foundPlayerName}.");
}
else
{
Task.Run(async () => { await _muteManager.UnmutePlayer(pattern, 1); }); // Unmute by type 1 (mute)
command.ReplyToCommand($"Unmuted offline player with pattern {pattern}.");
}
/*
TargetResult? targets = GetTarget(command);
if (targets == null) return;
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => player != null && player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
@@ -674,10 +694,8 @@ namespace CS2_SimpleAdmin
playerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Mute);
player.VoiceFlags = VoiceFlags.Normal;
});
*/
command.ReplyToCommand($"Unmuted player with pattern {pattern}.");
return;
}
}
[ConsoleCommand("css_silence")]
@@ -926,6 +944,8 @@ namespace CS2_SimpleAdmin
{
if (_database == null) return;
string callerName = caller == null ? "Console" : caller.PlayerName;
string foundPlayerName = string.Empty;
string foundPlayerSteamId64 = string.Empty;
if (command.GetArg(1).Length <= 1)
{
@@ -946,11 +966,6 @@ namespace CS2_SimpleAdmin
MuteManager _muteManager = new(_database);
PlayerPenaltyManager playerPenaltyManager = new PlayerPenaltyManager();
Task.Run(async () =>
{
await _muteManager.UnmutePlayer(pattern, 2); // Unmute by type 2 (silence)
});
if (Helper.IsValidSteamID64(pattern))
{
List<CCSPlayerController> matches = Helper.GetPlayerFromSteamid64(pattern);
@@ -965,6 +980,8 @@ namespace CS2_SimpleAdmin
playerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Silence);
player.VoiceFlags = VoiceFlags.Normal;
found = true;
foundPlayerName = player.PlayerName;
foundPlayerSteamId64 = player.SteamID.ToString();
}
}
}
@@ -983,17 +1000,25 @@ namespace CS2_SimpleAdmin
player.VoiceFlags = VoiceFlags.Normal;
pattern = player.SteamID.ToString();
found = true;
foundPlayerName = player.PlayerName;
foundPlayerSteamId64 = player.SteamID.ToString();
}
}
}
if (found)
{
//Task.Run(async () => { await _muteManager.UnmutePlayer(pattern, 2); }); // Unmute by type 2 (silence)
command.ReplyToCommand($"Unsilenced player with pattern {pattern}.");
Task.Run(async () => { await _muteManager.UnmutePlayer(foundPlayerSteamId64, 2); }); // Unmute by type 2 (silence)
command.ReplyToCommand($"Unsilenced player {foundPlayerName}.");
return;
}
else
{
Task.Run(async () => { await _muteManager.UnmutePlayer(pattern, 2); }); // Unmute by type 2 (silence)
command.ReplyToCommand($"Unsilenced offline player with pattern {pattern}.");
return;
}
/*
TargetResult? targets = GetTarget(command);
if (targets == null) return;
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => player != null && player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
@@ -1019,7 +1044,7 @@ namespace CS2_SimpleAdmin
command.ReplyToCommand($"Unsilenced player with pattern {pattern}.");
return;
}
*/
}
}
}

View File

@@ -24,7 +24,7 @@ namespace CS2_SimpleAdmin
public class CS2_SimpleAdminConfig : BasePluginConfig
{
[JsonPropertyName("ConfigVersion")] public override int Version { get; set; } = 7;
[JsonPropertyName("ConfigVersion")] public override int Version { get; set; } = 8;
[JsonPropertyName("DatabaseHost")]
public string DatabaseHost { get; set; } = "";

View File

@@ -254,32 +254,37 @@ public partial class CS2_SimpleAdmin
Server.NextFrame(() =>
{
foreach (CCSPlayerController player in Helper.GetValidPlayers())
try
{
if (playerPenaltyManager.IsSlotInPenalties(player.Slot))
foreach (CCSPlayerController player in Helper.GetValidPlayers())
{
if (!playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Mute) && !playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
player.VoiceFlags = VoiceFlags.Normal;
if (!playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) && !playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
if (playerPenaltyManager.IsSlotInPenalties(player.Slot))
{
if (TagsDetected)
Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}");
}
if (!playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Mute) && !playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
player.VoiceFlags = VoiceFlags.Normal;
if (
!playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence) &&
!playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Mute) &&
!playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag)
)
{
player.VoiceFlags = VoiceFlags.Normal;
if (!playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) && !playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
{
if (TagsDetected)
Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}");
}
if (TagsDetected)
Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}");
if (
!playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence) &&
!playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Mute) &&
!playerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag)
)
{
player.VoiceFlags = VoiceFlags.Normal;
if (TagsDetected)
Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}");
}
}
}
}
catch (Exception) { }
});
playerPenaltyManager.RemoveExpiredPenalties();

View File

@@ -25,7 +25,7 @@ namespace CS2_SimpleAdmin
public static List<CCSPlayerController> GetPlayerFromName(string name)
{
return Utilities.GetPlayers().FindAll(x => x.PlayerName.Contains(name, StringComparison.OrdinalIgnoreCase));
return Utilities.GetPlayers().FindAll(x => x.PlayerName.Equals(name, StringComparison.OrdinalIgnoreCase));
}
public static List<CCSPlayerController> GetPlayerFromSteamid64(string steamid)

View File

@@ -37,7 +37,7 @@ public class PlayerPenaltyManager
{
//Console.WriteLine($"Found penalties for player with slot {slot} and penalty type {penaltyType}");
DateTime now = DateTime.Now;
DateTime now = DateTime.UtcNow;
// Check if any active penalties exist
foreach (var penalty in penaltiesList.ToList())
@@ -115,7 +115,7 @@ public class PlayerPenaltyManager
// Remove all expired penalties for all players and penalty types
public void RemoveExpiredPenalties()
{
DateTime now = DateTime.Now;
DateTime now = DateTime.UtcNow;
foreach (var kvp in penalties.ToList()) // Use ToList to avoid modification while iterating
{
var playerSlot = kvp.Key;