- Possibility to use new line in translations
- Improved initializing
- More errors logging
- Localized Message refactor
This commit is contained in:
Dawid Bepierszcz
2024-07-15 21:50:06 +02:00
parent 3bc51330af
commit bb0a236f28
16 changed files with 334 additions and 368 deletions

View File

@@ -18,6 +18,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
public static IStringLocalizer? _localizer; public static IStringLocalizer? _localizer;
public static readonly Dictionary<string, int> VoteAnswers = []; public static readonly Dictionary<string, int> VoteAnswers = [];
private static bool _serverLoaded;
private static readonly HashSet<int> GodPlayers = []; private static readonly HashSet<int> GodPlayers = [];
private static readonly HashSet<int> SilentPlayers = []; private static readonly HashSet<int> SilentPlayers = [];
private static readonly ConcurrentBag<string> BannedPlayers = []; private static readonly ConcurrentBag<string> BannedPlayers = [];
@@ -40,7 +41,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.5.0a"; public override string ModuleVersion => "1.5.1a";
public CS2_SimpleAdminConfig Config { get; set; } = new(); public CS2_SimpleAdminConfig Config { get; set; } = new();
@@ -52,6 +53,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
if (hotReload) if (hotReload)
{ {
_serverLoaded = false;
OnMapStart(string.Empty); OnMapStart(string.Empty);
} }

View File

@@ -10,7 +10,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.246" /> <PackageReference Include="CounterStrikeSharp.API" Version="1.0.247" />
<PackageReference Include="Dapper" Version="2.1.35" /> <PackageReference Include="Dapper" Version="2.1.35" />
<PackageReference Include="Discord.Net.Webhook" Version="3.15.2" /> <PackageReference Include="Discord.Net.Webhook" Version="3.15.2" />
<PackageReference Include="MySqlConnector" Version="2.3.7" /> <PackageReference Include="MySqlConnector" Version="2.3.7" />

View File

@@ -5,7 +5,6 @@ using CounterStrikeSharp.API.Core.Translations;
using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Commands;
using CounterStrikeSharp.API.Modules.Entities; using CounterStrikeSharp.API.Modules.Entities;
using System.Text;
namespace CS2_SimpleAdmin namespace CS2_SimpleAdmin
{ {
@@ -105,12 +104,12 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_ban_message_perm",
sb.Append(_localizer["sa_admin_ban_message_perm", callerName, player.PlayerName, reason]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName ?? string.Empty,
} reason);
} }
} }
} }
@@ -125,12 +124,13 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_ban_message_time",
sb.Append(_localizer["sa_admin_ban_message_time", callerName, player.PlayerName, reason, time]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName ?? string.Empty,
} reason,
time);
} }
} }
} }
@@ -211,12 +211,12 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_ban_message_perm",
sb.Append(_localizer["sa_admin_ban_message_perm", callerName, player.PlayerName, reason]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName ?? string.Empty,
} reason);
} }
} }
} }
@@ -232,12 +232,13 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_ban_message_time",
sb.Append(_localizer["sa_admin_ban_message_time", callerName, player.PlayerName, reason, time]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName ?? string.Empty,
} reason,
time);
} }
} }
} }
@@ -325,12 +326,12 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_ban_message_perm",
sb.Append(_localizer["sa_admin_ban_message_perm", callerName, player.PlayerName, reason]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName ?? string.Empty,
} reason);
} }
} }
} }
@@ -345,12 +346,13 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_ban_message_time",
sb.Append(_localizer["sa_admin_ban_message_time", callerName, player.PlayerName, reason, time]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName ?? string.Empty,
} reason,
time);
} }
} }
} }

View File

@@ -25,14 +25,13 @@ namespace CS2_SimpleAdmin
var utf8String = Encoding.UTF8.GetString(utf8BytesString); var utf8String = Encoding.UTF8.GetString(utf8BytesString);
foreach (var player in Helper.GetValidPlayers() foreach (var player in Helper.GetValidPlayers()
.Where(p => AdminManager.PlayerHasPermissions(p, "@css/chat"))) .Where(p => AdminManager.PlayerHasPermissions(p, "@css/chat")))
{ {
using (new WithTemporaryCulture(player.GetLanguage())) if (_localizer != null)
{ player.SendLocalizedMessage(_localizer,
StringBuilder sb = new(); "sa_adminchat_template_admin",
sb.Append(_localizer!["sa_adminchat_template_admin", caller == null ? "Console" : caller.PlayerName, utf8String]); caller == null ? "Console" : caller.PlayerName,
player.PrintToChat(sb.ToString()); utf8String);
}
} }
} }
@@ -51,12 +50,10 @@ namespace CS2_SimpleAdmin
foreach (var player in Helper.GetValidPlayers()) foreach (var player in Helper.GetValidPlayers())
{ {
using (new WithTemporaryCulture(player.GetLanguage())) if (_localizer != null)
{ player.SendLocalizedMessage(_localizer,
StringBuilder sb = new(); "sa_adminsay_prefix",
sb.Append(_localizer!["sa_adminsay_prefix", utf8String]); utf8String);
player.PrintToChat(sb.ToString());
}
} }
} }

View File

@@ -10,7 +10,6 @@ using CounterStrikeSharp.API.Modules.Utils;
using CS2_SimpleAdmin.Menus; using CS2_SimpleAdmin.Menus;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Text;
namespace CS2_SimpleAdmin namespace CS2_SimpleAdmin
{ {
@@ -321,11 +320,17 @@ namespace CS2_SimpleAdmin
await adminManager.CrateGroupsJsonFile(); await adminManager.CrateGroupsJsonFile();
await adminManager.CreateAdminsJsonFile(); await adminManager.CreateAdminsJsonFile();
var adminsFile = await File.ReadAllTextAsync(Instance.ModuleDirectory + "/data/admins.json") ?? "";
var groupsFile = await File.ReadAllTextAsync(Instance.ModuleDirectory + "/data/groups.json") ?? "";
await Server.NextFrameAsync(() => await Server.NextFrameAsync(() =>
{ {
AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json"); if (!string.IsNullOrEmpty(adminsFile))
AddTimer(1.0f, () => AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json")); AddTimer(0.5f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json"));
AddTimer(1.5f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json")); if (!string.IsNullOrEmpty(groupsFile))
AddTimer(1.0f, () => AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json"));
if (!string.IsNullOrEmpty(adminsFile))
AddTimer(1.5f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json"));
}); });
}); });
@@ -567,13 +572,12 @@ 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().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
if (_localizer != null)
using (new WithTemporaryCulture(controller.GetLanguage())) controller.SendLocalizedMessage(_localizer,
{ "sa_admin_kick_message",
StringBuilder sb = new(_localizer!["sa_prefix"]); callerName,
sb.Append(_localizer["sa_admin_kick_message", callerName, player?.PlayerName ?? string.Empty, reason]); player?.PlayerName ?? string.Empty,
controller.PrintToChat(sb.ToString()); reason);
}
} }
} }
@@ -626,12 +630,11 @@ namespace CS2_SimpleAdmin
{ {
foreach (var player in Helper.GetValidPlayers()) foreach (var player in Helper.GetValidPlayers())
{ {
using (new WithTemporaryCulture(player.GetLanguage())) if (_localizer != null)
{ player.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_changemap_message",
sb.Append(_localizer["sa_admin_changemap_message", caller == null ? "Console" : caller.PlayerName, map]); caller == null ? "Console" : caller.PlayerName,
player.PrintToChat(sb.ToString()); map);
}
} }
} }
@@ -661,12 +664,11 @@ namespace CS2_SimpleAdmin
{ {
foreach (var player in Helper.GetValidPlayers()) foreach (var player in Helper.GetValidPlayers())
{ {
using (new WithTemporaryCulture(player.GetLanguage())) if (_localizer != null)
{ player.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_changemap_message",
sb.Append(_localizer["sa_admin_changemap_message", caller == null ? "Console" : caller.PlayerName, map]); caller == null ? "Console" : caller.PlayerName,
player.PrintToChat(sb.ToString()); map);
}
} }
} }

View File

@@ -4,7 +4,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Core.Translations;
using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Commands;
using System.Text;
namespace CS2_SimpleAdmin namespace CS2_SimpleAdmin
{ {
@@ -91,12 +90,12 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_gag_message_perm",
sb.Append(_localizer["sa_admin_gag_message_perm", callerName, player.PlayerName, reason]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName,
} reason);
} }
} }
} }
@@ -114,12 +113,13 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_gag_message_time",
sb.Append(_localizer["sa_admin_gag_message_time", callerName, player.PlayerName, reason, time]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName,
} reason,
time);
} }
} }
} }
@@ -191,12 +191,12 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_gag_message_perm",
sb.Append(_localizer["sa_admin_gag_message_perm", callerName, player.PlayerName, reason]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName,
} reason);
} }
} }
} }
@@ -212,12 +212,13 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_gag_message_time",
sb.Append(_localizer["sa_admin_gag_message_time", callerName, player.PlayerName, reason, time]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName,
} reason,
time);
} }
} }
} }
@@ -430,12 +431,12 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_mute_message_perm",
sb.Append(_localizer["sa_admin_mute_message_perm", callerName, player.PlayerName, reason]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName,
} reason);
} }
} }
} }
@@ -450,12 +451,13 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_mute_message_time",
sb.Append(_localizer["sa_admin_mute_message_time", callerName, player.PlayerName, reason, time]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName,
} reason,
time);
} }
} }
} }
@@ -530,12 +532,12 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_mute_message_perm",
sb.Append(_localizer["sa_admin_mute_message_perm", callerName, player.PlayerName, reason]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName,
} reason);
} }
} }
} }
@@ -550,12 +552,13 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_mute_message_time",
sb.Append(_localizer["sa_admin_mute_message_time", callerName, player.PlayerName, reason, time]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName,
} reason,
time);
} }
} }
} }
@@ -679,7 +682,7 @@ namespace CS2_SimpleAdmin
if (_database == null) return; if (_database == null) return;
var callerName = caller == null ? "Console" : caller.PlayerName; var callerName = caller == null ? "Console" : caller.PlayerName;
var reason = CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"; var reason = _localizer?["sa_unknown"] ?? "Unknown";
var targets = GetTarget(command); var targets = GetTarget(command);
if (targets == null) return; if (targets == null) return;
@@ -754,12 +757,12 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_silence_message_perm",
sb.Append(_localizer["sa_admin_silence_message_perm", callerName, player.PlayerName, reason]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName,
} reason);
} }
} }
} }
@@ -777,12 +780,13 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_silence_message_time",
sb.Append(_localizer["sa_admin_silence_message_time", callerName, player.PlayerName, reason, time]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName,
} reason,
time);
} }
} }
} }
@@ -858,12 +862,12 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_silence_message_perm",
sb.Append(_localizer["sa_admin_silence_message_perm", callerName, player.PlayerName, reason]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName,
} reason);
} }
} }
} }
@@ -878,12 +882,13 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_silence_message_time",
sb.Append(_localizer["sa_admin_silence_message_time", callerName, player.PlayerName, reason, time]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName,
} reason,
time);
} }
} }
} }

View File

@@ -4,7 +4,6 @@ using CounterStrikeSharp.API.Core.Translations;
using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Commands;
using CounterStrikeSharp.API.Modules.Menu; using CounterStrikeSharp.API.Modules.Menu;
using System.Text;
namespace CS2_SimpleAdmin namespace CS2_SimpleAdmin
{ {
@@ -50,9 +49,12 @@ namespace CS2_SimpleAdmin
voteMenu.PostSelectAction = PostSelectAction.Close; voteMenu.PostSelectAction = PostSelectAction.Close;
Helper.PrintToCenterAll(_localizer["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]); Helper.PrintToCenterAll(_localizer["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]);
StringBuilder sb = new(_localizer["sa_prefix"]);
sb.Append(_localizer["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]); if (_localizer != null)
player.PrintToChat(sb.ToString()); player.SendLocalizedMessage(_localizer,
"sa_admin_vote_message",
caller == null ? "Console" : caller.PlayerName,
question);
voteMenu.Open(player); voteMenu.Open(player);
@@ -69,24 +71,21 @@ namespace CS2_SimpleAdmin
{ {
foreach (var player in Helper.GetValidPlayers()) foreach (var player in Helper.GetValidPlayers())
{ {
using (new WithTemporaryCulture(player.GetLanguage())) if (_localizer != null)
{ player.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_vote_message_results",
sb.Append(_localizer["sa_admin_vote_message_results", question]); question);
player.PrintToChat(sb.ToString());
}
} }
foreach (var (key, value) in VoteAnswers) foreach (var (key, value) in VoteAnswers)
{ {
foreach (var player in Helper.GetValidPlayers()) foreach (var player in Helper.GetValidPlayers())
{ {
using (new WithTemporaryCulture(player.GetLanguage())) if (_localizer != null)
{ player.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_vote_message_results_answer",
sb.Append(_localizer["sa_admin_vote_message_results_answer", key, value]); key,
player.PrintToChat(sb.ToString()); value);
}
} }
} }
VoteAnswers.Clear(); VoteAnswers.Clear();

View File

@@ -1,9 +1,7 @@
using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration; using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Core.Translations;
using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Commands;
using System.Text;
namespace CS2_SimpleAdmin namespace CS2_SimpleAdmin
{ {
@@ -45,12 +43,11 @@ 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().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_noclip_message",
sb.Append(_localizer["sa_admin_noclip_message", callerName, player.PlayerName]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName);
}
} }
} }
@@ -93,12 +90,11 @@ 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().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_freeze_message",
sb.Append(_localizer["sa_admin_freeze_message", callerName, player?.PlayerName ?? string.Empty]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty);
}
} }
} }
@@ -136,12 +132,11 @@ 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().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_unfreeze_message",
sb.Append(_localizer["sa_admin_unfreeze_message", callerName, player.PlayerName]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty);
}
} }
} }
} }

View File

@@ -1,12 +1,10 @@
using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration; using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Core.Translations;
using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Commands;
using CounterStrikeSharp.API.Modules.Entities.Constants; using CounterStrikeSharp.API.Modules.Entities.Constants;
using CounterStrikeSharp.API.Modules.Memory; using CounterStrikeSharp.API.Modules.Memory;
using CounterStrikeSharp.API.Modules.Utils; using CounterStrikeSharp.API.Modules.Utils;
using System.Text;
namespace CS2_SimpleAdmin namespace CS2_SimpleAdmin
{ {
@@ -49,12 +47,11 @@ 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().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_slay_message",
sb.Append(_localizer["sa_admin_slay_message", callerName, player?.PlayerName ?? string.Empty]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty);
}
} }
} }
@@ -136,12 +133,12 @@ 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().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_give_message",
sb.Append(_localizer["sa_admin_give_message", callerName, player.PlayerName, weaponName]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty,
} weaponName);
} }
} }
@@ -185,12 +182,11 @@ 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().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_strip_message",
sb.Append(_localizer["sa_admin_strip_message", callerName, player?.PlayerName ?? string.Empty]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty);
}
} }
} }
@@ -235,12 +231,11 @@ 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().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_hp_message",
sb.Append(_localizer["sa_admin_hp_message", callerName, player?.PlayerName ?? string.Empty]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty);
}
} }
} }
@@ -286,12 +281,11 @@ 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().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_speed_message",
sb.Append(_localizer["sa_admin_speed_message", callerName, player!.PlayerName]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty);
}
} }
} }
@@ -339,12 +333,11 @@ 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().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_gravity_message",
sb.Append(_localizer["sa_admin_gravity_message", callerName, player!.PlayerName]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty);
}
} }
} }
@@ -390,12 +383,11 @@ 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().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_money_message",
sb.Append(_localizer["sa_admin_money_message", callerName, player!.PlayerName]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty);
}
} }
} }
@@ -447,12 +439,11 @@ 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().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_god_message",
sb.Append(_localizer["sa_admin_god_message", callerName, player.PlayerName]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty);
}
} }
} }
@@ -506,12 +497,11 @@ namespace CS2_SimpleAdmin
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer["sa_prefix"]); "sa_admin_slap_message",
sb.Append(_localizer["sa_admin_slap_message", callerName, player.PlayerName]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty);
}
} }
} }
@@ -600,12 +590,12 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_team_message",
sb.Append(_localizer["sa_admin_team_message", callerName, player?.PlayerName ?? string.Empty, teamName]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty,
} teamName);
} }
} }
@@ -642,12 +632,12 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_rename_message",
sb.Append(_localizer["sa_admin_rename_message", callerName, player.PlayerName, newName]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty,
} newName);
} }
} }
@@ -680,12 +670,12 @@ namespace CS2_SimpleAdmin
{ {
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_rename_message",
sb.Append(_localizer["sa_admin_rename_message", callerName, player.PlayerName, newName]); callerName,
controller.PrintToChat(sb.ToString()); player.PlayerName ?? string.Empty,
} newName);
} }
} }
@@ -747,12 +737,11 @@ 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().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_respawn_message",
sb.Append(_localizer["sa_admin_respawn_message", callerName, player.PlayerName]); callerName,
controller.PrintToChat(sb.ToString()); player?.PlayerName ?? string.Empty);
}
} }
} }
@@ -792,12 +781,11 @@ namespace CS2_SimpleAdmin
if (SilentPlayers.Contains(caller.Slot)) return; if (SilentPlayers.Contains(caller.Slot)) return;
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_tp_message",
sb.Append(_localizer["sa_admin_tp_message", caller.PlayerName, player.PlayerName]); caller.PlayerName,
controller.PrintToChat(sb.ToString()); player.PlayerName ?? string.Empty);
}
} }
}); });
} }
@@ -837,12 +825,11 @@ namespace CS2_SimpleAdmin
if (SilentPlayers.Contains(caller.Slot)) return; if (SilentPlayers.Contains(caller.Slot)) return;
foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false }))
{ {
using (new WithTemporaryCulture(controller.GetLanguage())) if (_localizer != null)
{ controller.SendLocalizedMessage(_localizer,
StringBuilder sb = new(_localizer!["sa_prefix"]); "sa_admin_bring_message",
sb.Append(_localizer["sa_admin_bring_message", caller.PlayerName, player.PlayerName]); caller.PlayerName,
controller.PrintToChat(sb.ToString()); player.PlayerName ?? string.Empty);
}
} }
}); });
} }

View File

@@ -15,8 +15,7 @@ public class Database(string dbConnectionString)
} }
catch (Exception ex) catch (Exception ex)
{ {
if (CS2_SimpleAdmin._logger != null) CS2_SimpleAdmin._logger?.LogCritical($"Unable to connect to database: {ex.Message}");
CS2_SimpleAdmin._logger.LogCritical($"Unable to connect to database: {ex.Message}");
throw; throw;
} }
} }

110
Events.cs
View File

@@ -12,6 +12,8 @@ namespace CS2_SimpleAdmin;
public partial class CS2_SimpleAdmin public partial class CS2_SimpleAdmin
{ {
private int _getIpTryCount = 0;
private void RegisterEvents() private void RegisterEvents()
{ {
RegisterListener<Listeners.OnMapStart>(OnMapStart); RegisterListener<Listeners.OnMapStart>(OnMapStart);
@@ -22,9 +24,9 @@ public partial class CS2_SimpleAdmin
private void OnGameServerSteamAPIActivated() private void OnGameServerSteamAPIActivated()
{ {
AddTimer(3.0f, () => AddTimer(2.0f, () =>
{ {
if (ServerId != null || _database == null) return; if (_serverLoaded || ServerId != null || _database == null) return;
var ipAddress = ConVar.Find("ip")?.StringValue; var ipAddress = ConVar.Find("ip")?.StringValue;
@@ -35,10 +37,16 @@ public partial class CS2_SimpleAdmin
if (string.IsNullOrEmpty(ipAddress) || ipAddress.StartsWith("0.0.0")) if (string.IsNullOrEmpty(ipAddress) || ipAddress.StartsWith("0.0.0"))
{ {
OnGameServerSteamAPIActivated(); if (_getIpTryCount < 12)
return; {
_getIpTryCount++;
OnGameServerSteamAPIActivated();
return;
}
} }
_getIpTryCount = 0;
var address = $"{ipAddress}:{ConVar.Find("hostport")?.GetPrimitiveValue<int>()}"; var address = $"{ipAddress}:{ConVar.Find("hostport")?.GetPrimitiveValue<int>()}";
var hostname = ConVar.Find("hostname")!.StringValue; var hostname = ConVar.Find("hostname")!.StringValue;
@@ -72,9 +80,10 @@ public partial class CS2_SimpleAdmin
if (ServerId != null) if (ServerId != null)
{ {
Server.NextFrame(() => ReloadAdmins(null)); await Server.NextFrameAsync(() => ReloadAdmins(null));
} }
_serverLoaded = true;
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -186,8 +195,10 @@ public partial class CS2_SimpleAdmin
{ {
await using var connection = await _database.GetConnectionAsync(); await using var connection = await _database.GetConnectionAsync();
const string query = @"INSERT IGNORE INTO `sa_players_ips` (steamid, address) const string query = """
VALUES (@SteamID, @IPAddress)"; INSERT INTO `sa_players_ips` (steamid, address)
VALUES (@SteamID, @IPAddress) ON DUPLICATE KEY UPDATE `used_at` = CURRENT_TIMESTAMP
""";
await connection.ExecuteAsync(query, new await connection.ExecuteAsync(query, new
{ {
@@ -361,8 +372,8 @@ public partial class CS2_SimpleAdmin
public void OnMapStart(string mapName) public void OnMapStart(string mapName)
{ {
if (Config.ReloadAdminsEveryMapChange && ServerId != null) if (Config.ReloadAdminsEveryMapChange && _serverLoaded && ServerId != null)
AddTimer(2.0f, () => ReloadAdmins(null)); AddTimer(3.0f, () => ReloadAdmins(null));
var path = Path.GetDirectoryName(ModuleDirectory); var path = Path.GetDirectoryName(ModuleDirectory);
if (Directory.Exists(path + "/CS2-Tags")) if (Directory.Exists(path + "/CS2-Tags"))
@@ -377,72 +388,6 @@ public partial class CS2_SimpleAdmin
_database = new Database.Database(_dbConnectionString); _database = new Database.Database(_dbConnectionString);
/*
AddTimer(2f, () =>
{
if (ServerId != null) return;
var ipAddress = ConVar.Find("ip")?.StringValue;
if (string.IsNullOrEmpty(ipAddress) || ipAddress.StartsWith("0.0.0"))
{
return;
ipAddress = Helper.GetServerIp();
}
var address = $"{ipAddress}:{ConVar.Find("hostport")?.GetPrimitiveValue<int>()}";
var hostname = ConVar.Find("hostname")!.StringValue;
Task.Run(async () =>
{
try
{
await using var connection = await _database.GetConnectionAsync();
var addressExists = await connection.ExecuteScalarAsync<bool>(
"SELECT COUNT(*) FROM sa_servers WHERE address = @address",
new { address });
if (!addressExists)
{
await connection.ExecuteAsync(
"INSERT INTO sa_servers (address, hostname) VALUES (@address, @hostname)",
new { address, hostname });
}
else
{
await connection.ExecuteAsync(
"UPDATE `sa_servers` SET `hostname` = @hostname, `id` = `id` WHERE `address` = @address",
new { address, hostname });
}
int? serverId = await connection.ExecuteScalarAsync<int>(
"SELECT `id` FROM `sa_servers` WHERE `address` = @address",
new { address });
ServerId = serverId;
}
catch (Exception ex)
{
_logger?.LogCritical("Unable to create or get server_id" + ex.Message);
}
if (Config.EnableMetrics)
{
var queryString = $"?address={address}&hostname={hostname}";
using HttpClient client = new();
try
{
await client.GetAsync($"https://api.daffyy.love/index.php{queryString}");
}
catch (HttpRequestException ex)
{
Logger.LogWarning($"Unable to make metrics call: {ex.Message}");
}
}
});
});
*/
AddTimer(61.0f, () => AddTimer(61.0f, () =>
{ {
#if DEBUG #if DEBUG
@@ -471,12 +416,17 @@ public partial class CS2_SimpleAdmin
try try
{ {
await banManager.CheckOnlinePlayers(onlinePlayers); await banManager.CheckOnlinePlayers(onlinePlayers);
if (Config.TimeMode == 0) if (Config.TimeMode == 0)
{ {
await muteManager.CheckOnlineModeMutes(onlinePlayers); await muteManager.CheckOnlineModeMutes(onlinePlayers);
} }
} }
catch { } catch(Exception)
{
Logger.LogError("Unable to check bans for online players");
}
} }
await muteManager.ExpireOldMutes(); await muteManager.ExpireOldMutes();
@@ -509,9 +459,11 @@ public partial class CS2_SimpleAdmin
PlayerPenaltyManager.RemoveExpiredPenalties(); PlayerPenaltyManager.RemoveExpiredPenalties();
} }
catch { } catch(Exception)
{
Logger.LogError("Unable to remove old penalties");
}
} }
}); });
}); });
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT | CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT | CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);

View File

@@ -1,8 +1,10 @@
using CounterStrikeSharp.API; using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Translations;
using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Entities; using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Memory; using CounterStrikeSharp.API.Modules.Memory;
using Microsoft.Extensions.Localization;
using System.Text; using System.Text;
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector; using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
@@ -193,4 +195,20 @@ public static class PlayerExtensions
if (pawn.Health <= 0) if (pawn.Health <= 0)
pawn.CommitSuicide(true, true); pawn.CommitSuicide(true, true);
} }
public static void SendLocalizedMessage(this CCSPlayerController? controller, IStringLocalizer localizer, string messageKey, params object[] messageArgs)
{
if (controller == null) return;
using (new WithTemporaryCulture(controller.GetLanguage()))
{
StringBuilder sb = new(localizer["sa_prefix"]);
sb.Append(localizer[messageKey, messageArgs]);
foreach (var part in Helper.SeparateLines(sb.ToString()))
{
controller.PrintToChat(part);
}
}
}
} }

View File

@@ -64,13 +64,13 @@ namespace CS2_SimpleAdmin
public static List<CCSPlayerController> GetValidPlayers() public static List<CCSPlayerController> GetValidPlayers()
{ {
return Utilities.GetPlayers().FindAll(p => p is return Utilities.GetPlayers().FindAll(p => p is
{ IsBot: false, IsHLTV: false }); { IsValid: true, IsBot: false, Connected: PlayerConnectedState.PlayerConnected });
} }
public static IEnumerable<CCSPlayerController?> GetValidPlayersWithBots() public static IEnumerable<CCSPlayerController?> GetValidPlayersWithBots()
{ {
return Utilities.GetPlayers().FindAll(p => return Utilities.GetPlayers().FindAll(p =>
p is { IsBot: false, IsHLTV: false } or { IsBot: true, IsHLTV: false } p is { IsValid: true, IsBot: false, IsHLTV: false } or { IsValid: true, IsBot: true, IsHLTV: false }
); );
} }
@@ -314,6 +314,11 @@ namespace CS2_SimpleAdmin
return message; return message;
} }
public static string[] SeparateLines(string message)
{
return message.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
}
public static string GetServerIp() public static string GetServerIp()
{ {
var network_system = NativeAPI.GetValveInterface(0, "NetworkSystemVersion001"); var network_system = NativeAPI.GetValveInterface(0, "NetworkSystemVersion001");

View File

@@ -389,9 +389,9 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
{ {
var currentTime = DateTime.UtcNow.ToLocalTime(); var currentTime = DateTime.UtcNow.ToLocalTime();
await using var connection = await database.GetConnectionAsync();
try try
{ {
await using var connection = await database.GetConnectionAsync();
/* /*
string sql = ""; string sql = "";
await using MySqlConnection connection = await _database.GetConnectionAsync(); await using MySqlConnection connection = await _database.GetConnectionAsync();

View File

@@ -5,7 +5,6 @@ using Microsoft.Extensions.Logging;
using MySqlConnector; using MySqlConnector;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using Serilog.Core;
namespace CS2_SimpleAdmin; namespace CS2_SimpleAdmin;
@@ -263,7 +262,7 @@ public class PermissionManager(Database.Database database)
{ {
var groupsData = await GetAllGroupsData(); var groupsData = await GetAllGroupsData();
var jsonStructure = new Dictionary<string, object>(); var jsonData = new Dictionary<string, object>();
foreach (var kvp in groupsData) foreach (var kvp in groupsData)
{ {
@@ -273,11 +272,12 @@ public class PermissionManager(Database.Database database)
["immunity"] = kvp.Value.Item2 ["immunity"] = kvp.Value.Item2
}; };
jsonStructure[kvp.Key] = groupData; jsonData[kvp.Key] = groupData;
} }
var json = JsonConvert.SerializeObject(jsonStructure, Formatting.Indented); var json = JsonConvert.SerializeObject(jsonData, Formatting.Indented);
await File.WriteAllTextAsync(CS2_SimpleAdmin.Instance.ModuleDirectory + "/data/groups.json", json); var filePath = Path.Combine(CS2_SimpleAdmin.Instance.ModuleDirectory, "data", "groups.json");
await File.WriteAllTextAsync(filePath, json);
} }
/* /*
@@ -374,7 +374,10 @@ public class PermissionManager(Database.Database database)
.ToDictionary(item => item.playerName, item => item.playerData); .ToDictionary(item => item.playerName, item => item.playerData);
var json = JsonConvert.SerializeObject(jsonData, Formatting.Indented); var json = JsonConvert.SerializeObject(jsonData, Formatting.Indented);
await File.WriteAllTextAsync(CS2_SimpleAdmin.Instance.ModuleDirectory + "/data/admins.json", json); var filePath = Path.Combine(CS2_SimpleAdmin.Instance.ModuleDirectory, "data", "admins.json");
await File.WriteAllTextAsync(filePath, json);
//await File.WriteAllTextAsync(CS2_SimpleAdmin.Instance.ModuleDirectory + "/data/admins.json", json);
} }
public async Task DeleteAdminBySteamId(string playerSteamId, bool globalDelete = false) public async Task DeleteAdminBySteamId(string playerSteamId, bool globalDelete = false)

View File

@@ -1 +1 @@
1.5.0a 1.5.1a