mirror of
https://github.com/daffyyyy/CS2-SimpleAdmin.git
synced 2026-03-03 14:32:26 +00:00
1.4.9a
- Plugin save all players ips to database, when player banned then all used ips are banned too (for ban evading) - Minor changes
This commit is contained in:
@@ -39,7 +39,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.4.8b";
|
public override string ModuleVersion => "1.4.9a";
|
||||||
|
|
||||||
public CS2_SimpleAdminConfig Config { get; set; } = new();
|
public CS2_SimpleAdminConfig Config { get; set; } = new();
|
||||||
|
|
||||||
@@ -112,9 +112,9 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
Directory.CreateDirectory(ModuleDirectory + "/data");
|
Directory.CreateDirectory(ModuleDirectory + "/data");
|
||||||
}
|
}
|
||||||
|
|
||||||
_localizer = Localizer;
|
_localizer = Localizer;
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(Config.Discord.DiscordLogWebhook))
|
if (!string.IsNullOrEmpty(Config.Discord.DiscordLogWebhook))
|
||||||
DiscordWebhookClientLog = new DiscordWebhookClient(Config.Discord.DiscordLogWebhook);
|
DiscordWebhookClientLog = new DiscordWebhookClient(Config.Discord.DiscordLogWebhook);
|
||||||
if (!string.IsNullOrEmpty(Config.Discord.DiscordPenaltyWebhook))
|
if (!string.IsNullOrEmpty(Config.Discord.DiscordPenaltyWebhook))
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -121,7 +121,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -207,7 +207,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -228,7 +228,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -321,7 +321,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -341,7 +341,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -521,7 +521,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
if (player == null || !player.IsValid)
|
if (!player.IsValid)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (caller!.CanTarget(player))
|
if (caller!.CanTarget(player))
|
||||||
@@ -549,7 +549,7 @@ namespace CS2_SimpleAdmin
|
|||||||
if (player != null && !player.IsBot)
|
if (player != null && !player.IsBot)
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player.PrintToCenter(_localizer!["sa_player_kick_message", reason, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_kick_message", reason, callerName]);
|
||||||
}
|
}
|
||||||
if (player != null && player.UserId.HasValue)
|
if (player != null && player.UserId.HasValue)
|
||||||
AddTimer(Config.KickTime, () => Helper.KickPlayer(player.UserId.Value, reason),
|
AddTimer(Config.KickTime, () => Helper.KickPlayer(player.UserId.Value, reason),
|
||||||
@@ -563,7 +563,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (caller != null && (caller.UserId == null || SilentPlayers.Contains(caller.Slot))) return;
|
if (caller != null && (caller.UserId == null || SilentPlayers.Contains(caller.Slot))) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
|
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -110,7 +110,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -187,7 +187,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -208,7 +208,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -424,7 +424,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -444,7 +444,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -524,7 +524,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -544,7 +544,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -746,7 +746,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -769,7 +769,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -850,7 +850,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -870,7 +870,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ namespace CS2_SimpleAdmin
|
|||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
var playersToTarget = targets.Players.Where(player =>
|
var playersToTarget = targets.Players.Where(player =>
|
||||||
player is not null &&
|
|
||||||
player.IsValid &&
|
player.IsValid &&
|
||||||
player is { PawnIsAlive: true, IsHLTV: false, Connected: PlayerConnectedState.PlayerConnected }).ToList();
|
player is { PawnIsAlive: true, IsHLTV: false, Connected: PlayerConnectedState.PlayerConnected }).ToList();
|
||||||
|
|
||||||
@@ -42,7 +41,7 @@ namespace CS2_SimpleAdmin
|
|||||||
Helper.LogCommand(caller, $"css_noclip {player.PlayerName}");
|
Helper.LogCommand(caller, $"css_noclip {player.PlayerName}");
|
||||||
|
|
||||||
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -88,7 +87,7 @@ namespace CS2_SimpleAdmin
|
|||||||
AddTimer(time, () => player?.Pawn.Value!.Unfreeze(), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
AddTimer(time, () => player?.Pawn.Value!.Unfreeze(), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
|
||||||
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -129,7 +128,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -126,7 +126,7 @@ namespace CS2_SimpleAdmin
|
|||||||
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
||||||
|
|
||||||
if (caller != null && (SilentPlayers.Contains(caller.Slot))) return;
|
if (caller != null && (SilentPlayers.Contains(caller.Slot))) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -173,7 +173,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -221,7 +221,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -270,7 +270,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -321,7 +321,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -370,7 +370,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -425,7 +425,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -473,15 +473,20 @@ namespace CS2_SimpleAdmin
|
|||||||
if (command != null)
|
if (command != null)
|
||||||
{
|
{
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
|
if (_localizer != null)
|
||||||
|
Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_localizer == null)
|
||||||
|
return;
|
||||||
|
|
||||||
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
|
||||||
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
StringBuilder sb = new(_localizer["sa_prefix"]);
|
||||||
sb.Append(_localizer["sa_admin_slap_message", callerName, player.PlayerName]);
|
sb.Append(_localizer["sa_admin_slap_message", callerName, player.PlayerName]);
|
||||||
controller.PrintToChat(sb.ToString());
|
controller.PrintToChat(sb.ToString());
|
||||||
}
|
}
|
||||||
@@ -569,7 +574,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -611,7 +616,7 @@ namespace CS2_SimpleAdmin
|
|||||||
if (!caller!.CanTarget(player)) return;
|
if (!caller!.CanTarget(player)) return;
|
||||||
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
if (caller == null || !SilentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -667,7 +672,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
if (caller != null && SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -712,7 +717,7 @@ namespace CS2_SimpleAdmin
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (SilentPlayers.Contains(caller.Slot)) return;
|
if (SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -757,7 +762,7 @@ namespace CS2_SimpleAdmin
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (SilentPlayers.Contains(caller.Slot)) return;
|
if (SilentPlayers.Contains(caller.Slot)) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
|
|||||||
8
Database/Migrations/009_BanAllUsedIpAddress.sql
Normal file
8
Database/Migrations/009_BanAllUsedIpAddress.sql
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS `sa_players_ips` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`steamid` bigint(20) NOT NULL,
|
||||||
|
`address` varchar(64) NOT NULL,
|
||||||
|
`used_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
UNIQUE KEY `steamid` (`steamid`,`address`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
15
Events.cs
15
Events.cs
@@ -182,6 +182,21 @@ public partial class CS2_SimpleAdmin
|
|||||||
BanManager banManager = new(_database, Config);
|
BanManager banManager = new(_database, Config);
|
||||||
MuteManager muteManager = new(_database);
|
MuteManager muteManager = new(_database);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await using var connection = await _database.GetConnectionAsync();
|
||||||
|
|
||||||
|
const string query = @"INSERT IGNORE INTO `sa_players_ips` (steamid, address)
|
||||||
|
VALUES (@SteamID, @IPAddress)";
|
||||||
|
|
||||||
|
await connection.ExecuteAsync(query, new
|
||||||
|
{
|
||||||
|
SteamID = playerInfo.SteamId,
|
||||||
|
IPAddress = playerInfo.IpAddress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Check if the player is banned
|
// Check if the player is banned
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
using System.Text;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API;
|
|
||||||
using Dapper;
|
using Dapper;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using MySqlConnector;
|
using MySqlConnector;
|
||||||
using Serilog.Core;
|
using System.Text;
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin;
|
namespace CS2_SimpleAdmin;
|
||||||
|
|
||||||
@@ -151,6 +150,25 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
|||||||
};
|
};
|
||||||
|
|
||||||
banCount = await connection.ExecuteScalarAsync<int>(sql, parameters);
|
banCount = await connection.ExecuteScalarAsync<int>(sql, parameters);
|
||||||
|
|
||||||
|
if (config.BanType == 1 && banCount == 0)
|
||||||
|
{
|
||||||
|
sql = """
|
||||||
|
SELECT
|
||||||
|
COUNT(*)
|
||||||
|
FROM
|
||||||
|
sa_bans
|
||||||
|
JOIN sa_players_ips ON sa_bans.player_steamid = sa_players_ips.steamid
|
||||||
|
WHERE
|
||||||
|
sa_bans.status = 'ACTIVE'
|
||||||
|
AND sa_players_ips.address = @PlayerIP;
|
||||||
|
""";
|
||||||
|
|
||||||
|
banCount = await connection.ExecuteScalarAsync<int>(sql, new
|
||||||
|
{
|
||||||
|
PlayerIP = player.IpAddress
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
@@ -215,9 +233,9 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
|||||||
var sqlRetrieveBans = config.MultiServerMode
|
var sqlRetrieveBans = config.MultiServerMode
|
||||||
? "SELECT id FROM sa_bans WHERE (player_steamid = @pattern OR player_name = @pattern OR player_ip = @pattern) AND status = 'ACTIVE'"
|
? "SELECT id FROM sa_bans WHERE (player_steamid = @pattern OR player_name = @pattern OR player_ip = @pattern) AND status = 'ACTIVE'"
|
||||||
: "SELECT id FROM sa_bans WHERE (player_steamid = @pattern OR player_name = @pattern OR player_ip = @pattern) AND status = 'ACTIVE' AND server_id = @serverid";
|
: "SELECT id FROM sa_bans WHERE (player_steamid = @pattern OR player_name = @pattern OR player_ip = @pattern) AND status = 'ACTIVE' AND server_id = @serverid";
|
||||||
|
|
||||||
var bans = await connection.QueryAsync(sqlRetrieveBans, new { pattern = playerPattern, serverid = CS2_SimpleAdmin.ServerId });
|
var bans = await connection.QueryAsync(sqlRetrieveBans, new { pattern = playerPattern, serverid = CS2_SimpleAdmin.ServerId });
|
||||||
|
|
||||||
var bansList = bans as dynamic[] ?? bans.ToArray();
|
var bansList = bans as dynamic[] ?? bans.ToArray();
|
||||||
if (bansList.Length == 0)
|
if (bansList.Length == 0)
|
||||||
return;
|
return;
|
||||||
@@ -298,73 +316,73 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
|||||||
catch { }
|
catch { }
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public async Task CheckOnlinePlayers(List<(string? IpAddress, ulong SteamID, int? UserId, int Slot)> players)
|
public async Task CheckOnlinePlayers(List<(string? IpAddress, ulong SteamID, int? UserId, int Slot)> players)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
bool checkIpBans = config.BanType > 0;
|
bool checkIpBans = config.BanType > 0;
|
||||||
|
|
||||||
var filteredPlayers = players.Where(p => p.UserId.HasValue).ToList();
|
var filteredPlayers = players.Where(p => p.UserId.HasValue).ToList();
|
||||||
|
|
||||||
var steamIds = filteredPlayers.Select(p => p.SteamID).Distinct().ToList();
|
|
||||||
var ipAddresses = filteredPlayers
|
|
||||||
.Where(p => !string.IsNullOrEmpty(p.IpAddress))
|
|
||||||
.Select(p => p.IpAddress)
|
|
||||||
.Distinct()
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
var sql = new StringBuilder();
|
var steamIds = filteredPlayers.Select(p => p.SteamID).Distinct().ToList();
|
||||||
sql.Append("SELECT `player_steamid`, `player_ip` FROM `sa_bans` WHERE `status` = 'ACTIVE' ");
|
var ipAddresses = filteredPlayers
|
||||||
|
.Where(p => !string.IsNullOrEmpty(p.IpAddress))
|
||||||
if (config.MultiServerMode)
|
.Select(p => p.IpAddress)
|
||||||
{
|
.Distinct()
|
||||||
sql.Append("AND (player_steamid IN @SteamIDs ");
|
.ToList();
|
||||||
if (checkIpBans && ipAddresses.Count != 0)
|
|
||||||
{
|
|
||||||
sql.Append("OR player_ip IN @IpAddresses");
|
|
||||||
}
|
|
||||||
sql.Append(')');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sql.Append("AND server_id = @ServerId AND (player_steamid IN @SteamIDs ");
|
|
||||||
if (checkIpBans && ipAddresses.Count != 0)
|
|
||||||
{
|
|
||||||
sql.Append("OR player_ip IN @IpAddresses");
|
|
||||||
}
|
|
||||||
sql.Append(')');
|
|
||||||
}
|
|
||||||
|
|
||||||
var bannedPlayers = await connection.QueryAsync<(ulong PlayerSteamID, string PlayerIP)>(
|
var sql = new StringBuilder();
|
||||||
sql.ToString(),
|
sql.Append("SELECT `player_steamid`, `player_ip` FROM `sa_bans` WHERE `status` = 'ACTIVE' ");
|
||||||
new
|
|
||||||
{
|
|
||||||
SteamIDs = steamIds,
|
|
||||||
IpAddresses = checkIpBans ? ipAddresses : [],
|
|
||||||
ServerId = CS2_SimpleAdmin.ServerId
|
|
||||||
});
|
|
||||||
|
|
||||||
var valueTuples = bannedPlayers.ToList();
|
if (config.MultiServerMode)
|
||||||
var bannedSteamIds = valueTuples.Select(b => b.PlayerSteamID).ToHashSet();
|
{
|
||||||
var bannedIps = valueTuples.Select(b => b.PlayerIP).ToHashSet();
|
sql.Append("AND (player_steamid IN @SteamIDs ");
|
||||||
|
if (checkIpBans && ipAddresses.Count != 0)
|
||||||
|
{
|
||||||
|
sql.Append("OR player_ip IN @IpAddresses");
|
||||||
|
}
|
||||||
|
sql.Append(')');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sql.Append("AND server_id = @ServerId AND (player_steamid IN @SteamIDs ");
|
||||||
|
if (checkIpBans && ipAddresses.Count != 0)
|
||||||
|
{
|
||||||
|
sql.Append("OR player_ip IN @IpAddresses");
|
||||||
|
}
|
||||||
|
sql.Append(')');
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var player in filteredPlayers.Where(player => bannedSteamIds.Contains(player.SteamID) ||
|
var bannedPlayers = await connection.QueryAsync<(ulong PlayerSteamID, string PlayerIP)>(
|
||||||
(checkIpBans && bannedIps.Contains(player.IpAddress ?? ""))))
|
sql.ToString(),
|
||||||
{
|
new
|
||||||
if (!player.UserId.HasValue) continue;
|
{
|
||||||
|
SteamIDs = steamIds,
|
||||||
await Server.NextFrameAsync(() =>
|
IpAddresses = checkIpBans ? ipAddresses : [],
|
||||||
{
|
ServerId = CS2_SimpleAdmin.ServerId
|
||||||
Helper.KickPlayer(player.UserId.Value, "Banned");
|
});
|
||||||
});
|
|
||||||
}
|
var valueTuples = bannedPlayers.ToList();
|
||||||
}
|
var bannedSteamIds = valueTuples.Select(b => b.PlayerSteamID).ToHashSet();
|
||||||
catch (Exception ex)
|
var bannedIps = valueTuples.Select(b => b.PlayerIP).ToHashSet();
|
||||||
{
|
|
||||||
CS2_SimpleAdmin._logger?.LogError($"Error checking online players: {ex.Message}");
|
foreach (var player in filteredPlayers.Where(player => bannedSteamIds.Contains(player.SteamID) ||
|
||||||
}
|
(checkIpBans && bannedIps.Contains(player.IpAddress ?? ""))))
|
||||||
|
{
|
||||||
|
if (!player.UserId.HasValue) continue;
|
||||||
|
|
||||||
|
await Server.NextFrameAsync(() =>
|
||||||
|
{
|
||||||
|
Helper.KickPlayer(player.UserId.Value, "Banned");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
CS2_SimpleAdmin._logger?.LogError($"Error checking online players: {ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ExpireOldBans()
|
public async Task ExpireOldBans()
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using CounterStrikeSharp.API.Core;
|
using Dapper;
|
||||||
using Dapper;
|
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin;
|
namespace CS2_SimpleAdmin;
|
||||||
@@ -98,7 +97,7 @@ internal class MuteManager(Database.Database database)
|
|||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
var currentTime = DateTime.UtcNow.ToLocalTime();
|
var currentTime = DateTime.UtcNow.ToLocalTime();
|
||||||
var sql = "";
|
var sql = "";
|
||||||
|
|
||||||
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
|
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
|
||||||
{
|
{
|
||||||
sql = CS2_SimpleAdmin.Instance.Config.TimeMode == 1
|
sql = CS2_SimpleAdmin.Instance.Config.TimeMode == 1
|
||||||
@@ -141,7 +140,7 @@ internal class MuteManager(Database.Database database)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task CheckOnlineModeMutes(List<(string? IpAddress, ulong SteamID, int? UserId, int Slot)> players)
|
public async Task CheckOnlineModeMutes(List<(string? IpAddress, ulong SteamID, int? UserId, int Slot)> players)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -158,7 +157,7 @@ internal class MuteManager(Database.Database database)
|
|||||||
await connection.ExecuteAsync(sql,
|
await connection.ExecuteAsync(sql,
|
||||||
new { PlayerSteamID = SteamID, serverid = CS2_SimpleAdmin.ServerId });
|
new { PlayerSteamID = SteamID, serverid = CS2_SimpleAdmin.ServerId });
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
for (var i = 0; i < players.Count; i += batchSize)
|
for (var i = 0; i < players.Count; i += batchSize)
|
||||||
{
|
{
|
||||||
var batch = players.Skip(i).Take(batchSize);
|
var batch = players.Skip(i).Take(batchSize);
|
||||||
@@ -171,7 +170,7 @@ internal class MuteManager(Database.Database database)
|
|||||||
|
|
||||||
await connection.ExecuteAsync(sql, parametersList);
|
await connection.ExecuteAsync(sql, parametersList);
|
||||||
}
|
}
|
||||||
|
|
||||||
sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode
|
sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode
|
||||||
? "SELECT * FROM `sa_mutes` WHERE player_steamid = @PlayerSteamID AND passed >= duration AND duration > 0 AND status = 'ACTIVE'"
|
? "SELECT * FROM `sa_mutes` WHERE player_steamid = @PlayerSteamID AND passed >= duration AND duration > 0 AND status = 'ACTIVE'"
|
||||||
: "SELECT * FROM `sa_mutes` WHERE player_steamid = @PlayerSteamID AND passed >= duration AND duration > 0 AND status = 'ACTIVE' AND server_id = @serverid";
|
: "SELECT * FROM `sa_mutes` WHERE player_steamid = @PlayerSteamID AND passed >= duration AND duration > 0 AND status = 'ACTIVE' AND server_id = @serverid";
|
||||||
@@ -180,7 +179,7 @@ internal class MuteManager(Database.Database database)
|
|||||||
foreach (var (IpAddress, SteamID, UserId, Slot) in players)
|
foreach (var (IpAddress, SteamID, UserId, Slot) in players)
|
||||||
{
|
{
|
||||||
var muteRecords = await connection.QueryAsync(sql, new { PlayerSteamID = SteamID, serverid = CS2_SimpleAdmin.ServerId });
|
var muteRecords = await connection.QueryAsync(sql, new { PlayerSteamID = SteamID, serverid = CS2_SimpleAdmin.ServerId });
|
||||||
|
|
||||||
foreach (var muteRecord in muteRecords)
|
foreach (var muteRecord in muteRecords)
|
||||||
{
|
{
|
||||||
DateTime endDateTime = muteRecord.ends;
|
DateTime endDateTime = muteRecord.ends;
|
||||||
@@ -268,7 +267,7 @@ internal class MuteManager(Database.Database database)
|
|||||||
{
|
{
|
||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
var sql = "";
|
var sql = "";
|
||||||
|
|
||||||
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
|
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
|
||||||
{
|
{
|
||||||
sql = CS2_SimpleAdmin.Instance.Config.TimeMode == 1
|
sql = CS2_SimpleAdmin.Instance.Config.TimeMode == 1
|
||||||
|
|||||||
Reference in New Issue
Block a user