diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index a52cb97..e9b819b 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -18,6 +18,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig VoteAnswers = []; + private static bool _serverLoaded; private static readonly HashSet GodPlayers = []; private static readonly HashSet SilentPlayers = []; private static readonly ConcurrentBag BannedPlayers = []; @@ -40,7 +41,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)"); public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)"; 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(); @@ -52,6 +53,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig - + diff --git a/Commands/basebans.cs b/Commands/basebans.cs index 3926540..02d195f 100644 --- a/Commands/basebans.cs +++ b/Commands/basebans.cs @@ -5,7 +5,6 @@ using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Entities; -using System.Text; namespace CS2_SimpleAdmin { @@ -105,12 +104,12 @@ namespace CS2_SimpleAdmin { foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_ban_message_perm", callerName, player.PlayerName, reason]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_ban_message_perm", + callerName, + 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_ban_message_time", callerName, player.PlayerName, reason, time]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_ban_message_time", + callerName, + 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_ban_message_perm", callerName, player.PlayerName, reason]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_ban_message_perm", + callerName, + 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_ban_message_time", callerName, player.PlayerName, reason, time]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_ban_message_time", + callerName, + 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_ban_message_perm", callerName, player.PlayerName, reason]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_ban_message_perm", + callerName, + 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_ban_message_time", callerName, player.PlayerName, reason, time]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_ban_message_time", + callerName, + player.PlayerName ?? string.Empty, + reason, + time); } } } diff --git a/Commands/basechat.cs b/Commands/basechat.cs index a5ae25e..192ace8 100644 --- a/Commands/basechat.cs +++ b/Commands/basechat.cs @@ -25,14 +25,13 @@ namespace CS2_SimpleAdmin var utf8String = Encoding.UTF8.GetString(utf8BytesString); 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())) - { - StringBuilder sb = new(); - sb.Append(_localizer!["sa_adminchat_template_admin", caller == null ? "Console" : caller.PlayerName, utf8String]); - player.PrintToChat(sb.ToString()); - } + if (_localizer != null) + player.SendLocalizedMessage(_localizer, + "sa_adminchat_template_admin", + caller == null ? "Console" : caller.PlayerName, + utf8String); } } @@ -51,12 +50,10 @@ namespace CS2_SimpleAdmin foreach (var player in Helper.GetValidPlayers()) { - using (new WithTemporaryCulture(player.GetLanguage())) - { - StringBuilder sb = new(); - sb.Append(_localizer!["sa_adminsay_prefix", utf8String]); - player.PrintToChat(sb.ToString()); - } + if (_localizer != null) + player.SendLocalizedMessage(_localizer, + "sa_adminsay_prefix", + utf8String); } } diff --git a/Commands/basecommands.cs b/Commands/basecommands.cs index 37ab38e..d15c475 100644 --- a/Commands/basecommands.cs +++ b/Commands/basecommands.cs @@ -10,7 +10,6 @@ using CounterStrikeSharp.API.Modules.Utils; using CS2_SimpleAdmin.Menus; using Microsoft.Extensions.Logging; using Newtonsoft.Json; -using System.Text; namespace CS2_SimpleAdmin { @@ -321,11 +320,17 @@ namespace CS2_SimpleAdmin await adminManager.CrateGroupsJsonFile(); 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(() => { - AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json"); - AddTimer(1.0f, () => AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json")); - AddTimer(1.5f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json")); + if (!string.IsNullOrEmpty(adminsFile)) + AddTimer(0.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; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_kick_message", callerName, player?.PlayerName ?? string.Empty, reason]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_kick_message", + callerName, + player?.PlayerName ?? string.Empty, + reason); } } @@ -626,12 +630,11 @@ namespace CS2_SimpleAdmin { foreach (var player in Helper.GetValidPlayers()) { - using (new WithTemporaryCulture(player.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_changemap_message", caller == null ? "Console" : caller.PlayerName, map]); - player.PrintToChat(sb.ToString()); - } + if (_localizer != null) + player.SendLocalizedMessage(_localizer, + "sa_admin_changemap_message", + caller == null ? "Console" : caller.PlayerName, + map); } } @@ -661,12 +664,11 @@ namespace CS2_SimpleAdmin { foreach (var player in Helper.GetValidPlayers()) { - using (new WithTemporaryCulture(player.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_changemap_message", caller == null ? "Console" : caller.PlayerName, map]); - player.PrintToChat(sb.ToString()); - } + if (_localizer != null) + player.SendLocalizedMessage(_localizer, + "sa_admin_changemap_message", + caller == null ? "Console" : caller.PlayerName, + map); } } diff --git a/Commands/basecomms.cs b/Commands/basecomms.cs index 0cc8fda..b7ca489 100644 --- a/Commands/basecomms.cs +++ b/Commands/basecomms.cs @@ -4,7 +4,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration; using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Commands; -using System.Text; namespace CS2_SimpleAdmin { @@ -91,12 +90,12 @@ namespace CS2_SimpleAdmin { foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_gag_message_perm", callerName, player.PlayerName, reason]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_gag_message_perm", + callerName, + player.PlayerName, + reason); } } } @@ -114,12 +113,13 @@ namespace CS2_SimpleAdmin { foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_gag_message_time", callerName, player.PlayerName, reason, time]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_gag_message_time", + callerName, + 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_gag_message_perm", callerName, player.PlayerName, reason]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_gag_message_perm", + callerName, + player.PlayerName, + reason); } } } @@ -212,12 +212,13 @@ namespace CS2_SimpleAdmin { foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_gag_message_time", callerName, player.PlayerName, reason, time]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_gag_message_time", + callerName, + 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_mute_message_perm", callerName, player.PlayerName, reason]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_mute_message_perm", + callerName, + player.PlayerName, + reason); } } } @@ -450,12 +451,13 @@ namespace CS2_SimpleAdmin { foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_mute_message_time", callerName, player.PlayerName, reason, time]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_mute_message_time", + callerName, + 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_mute_message_perm", callerName, player.PlayerName, reason]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_mute_message_perm", + callerName, + player.PlayerName, + reason); } } } @@ -550,12 +552,13 @@ namespace CS2_SimpleAdmin { foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_mute_message_time", callerName, player.PlayerName, reason, time]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_mute_message_time", + callerName, + player.PlayerName, + reason, + time); } } } @@ -679,7 +682,7 @@ namespace CS2_SimpleAdmin if (_database == null) return; 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); 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_silence_message_perm", callerName, player.PlayerName, reason]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_silence_message_perm", + callerName, + player.PlayerName, + reason); } } } @@ -777,12 +780,13 @@ namespace CS2_SimpleAdmin { foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_silence_message_time", callerName, player.PlayerName, reason, time]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_silence_message_time", + callerName, + 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_silence_message_perm", callerName, player.PlayerName, reason]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_silence_message_perm", + callerName, + player.PlayerName, + reason); } } } @@ -878,12 +882,13 @@ namespace CS2_SimpleAdmin { foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_silence_message_time", callerName, player.PlayerName, reason, time]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_silence_message_time", + callerName, + player.PlayerName, + reason, + time); } } } diff --git a/Commands/basevotes.cs b/Commands/basevotes.cs index aa5c260..cce1f85 100644 --- a/Commands/basevotes.cs +++ b/Commands/basevotes.cs @@ -4,7 +4,6 @@ using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Menu; -using System.Text; namespace CS2_SimpleAdmin { @@ -50,9 +49,12 @@ namespace CS2_SimpleAdmin voteMenu.PostSelectAction = PostSelectAction.Close; 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]); - player.PrintToChat(sb.ToString()); + + if (_localizer != null) + player.SendLocalizedMessage(_localizer, + "sa_admin_vote_message", + caller == null ? "Console" : caller.PlayerName, + question); voteMenu.Open(player); @@ -69,24 +71,21 @@ namespace CS2_SimpleAdmin { foreach (var player in Helper.GetValidPlayers()) { - using (new WithTemporaryCulture(player.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_vote_message_results", question]); - player.PrintToChat(sb.ToString()); - } + if (_localizer != null) + player.SendLocalizedMessage(_localizer, + "sa_admin_vote_message_results", + question); } foreach (var (key, value) in VoteAnswers) { foreach (var player in Helper.GetValidPlayers()) { - using (new WithTemporaryCulture(player.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_vote_message_results_answer", key, value]); - player.PrintToChat(sb.ToString()); - } + if (_localizer != null) + player.SendLocalizedMessage(_localizer, + "sa_admin_vote_message_results_answer", + key, + value); } } VoteAnswers.Clear(); diff --git a/Commands/funcommands.cs b/Commands/funcommands.cs index d5c91a6..22a83b1 100644 --- a/Commands/funcommands.cs +++ b/Commands/funcommands.cs @@ -1,9 +1,7 @@ using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core.Attributes.Registration; -using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Commands; -using System.Text; namespace CS2_SimpleAdmin { @@ -45,12 +43,11 @@ namespace CS2_SimpleAdmin if (caller != null && SilentPlayers.Contains(caller.Slot)) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_noclip_message", callerName, player.PlayerName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_noclip_message", + callerName, + player.PlayerName); } } @@ -93,12 +90,11 @@ namespace CS2_SimpleAdmin if (caller != null && SilentPlayers.Contains(caller.Slot)) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_freeze_message", callerName, player?.PlayerName ?? string.Empty]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_freeze_message", + callerName, + player?.PlayerName ?? string.Empty); } } @@ -136,12 +132,11 @@ namespace CS2_SimpleAdmin if (caller != null && SilentPlayers.Contains(caller.Slot)) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_unfreeze_message", callerName, player.PlayerName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_unfreeze_message", + callerName, + player?.PlayerName ?? string.Empty); } } } diff --git a/Commands/playercommands.cs b/Commands/playercommands.cs index 21ac4a3..fa633e2 100644 --- a/Commands/playercommands.cs +++ b/Commands/playercommands.cs @@ -1,12 +1,10 @@ using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core.Attributes.Registration; -using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Entities.Constants; using CounterStrikeSharp.API.Modules.Memory; using CounterStrikeSharp.API.Modules.Utils; -using System.Text; namespace CS2_SimpleAdmin { @@ -49,12 +47,11 @@ namespace CS2_SimpleAdmin if (caller != null && SilentPlayers.Contains(caller.Slot)) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_slay_message", callerName, player?.PlayerName ?? string.Empty]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_slay_message", + callerName, + player?.PlayerName ?? string.Empty); } } @@ -136,12 +133,12 @@ namespace CS2_SimpleAdmin if (caller != null && (SilentPlayers.Contains(caller.Slot))) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_give_message", callerName, player.PlayerName, weaponName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_give_message", + callerName, + player?.PlayerName ?? string.Empty, + weaponName); } } @@ -185,12 +182,11 @@ namespace CS2_SimpleAdmin if (caller != null && SilentPlayers.Contains(caller.Slot)) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_strip_message", callerName, player?.PlayerName ?? string.Empty]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_strip_message", + callerName, + player?.PlayerName ?? string.Empty); } } @@ -235,12 +231,11 @@ namespace CS2_SimpleAdmin if (caller != null && SilentPlayers.Contains(caller.Slot)) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_hp_message", callerName, player?.PlayerName ?? string.Empty]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_hp_message", + callerName, + player?.PlayerName ?? string.Empty); } } @@ -286,12 +281,11 @@ namespace CS2_SimpleAdmin if (caller != null && SilentPlayers.Contains(caller.Slot)) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_speed_message", callerName, player!.PlayerName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_speed_message", + callerName, + player?.PlayerName ?? string.Empty); } } @@ -339,12 +333,11 @@ namespace CS2_SimpleAdmin if (caller != null && SilentPlayers.Contains(caller.Slot)) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_gravity_message", callerName, player!.PlayerName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_gravity_message", + callerName, + player?.PlayerName ?? string.Empty); } } @@ -390,12 +383,11 @@ namespace CS2_SimpleAdmin if (caller != null && SilentPlayers.Contains(caller.Slot)) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_money_message", callerName, player!.PlayerName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_money_message", + callerName, + player?.PlayerName ?? string.Empty); } } @@ -447,12 +439,11 @@ namespace CS2_SimpleAdmin if (caller != null && SilentPlayers.Contains(caller.Slot)) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_god_message", callerName, player.PlayerName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_god_message", + callerName, + 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer["sa_prefix"]); - sb.Append(_localizer["sa_admin_slap_message", callerName, player.PlayerName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_slap_message", + callerName, + 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_team_message", callerName, player?.PlayerName ?? string.Empty, teamName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_team_message", + callerName, + 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_rename_message", callerName, player.PlayerName, newName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_rename_message", + callerName, + 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 })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_rename_message", callerName, player.PlayerName, newName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_rename_message", + callerName, + player.PlayerName ?? string.Empty, + newName); } } @@ -747,12 +737,11 @@ namespace CS2_SimpleAdmin if (caller != null && SilentPlayers.Contains(caller.Slot)) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_respawn_message", callerName, player.PlayerName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_respawn_message", + callerName, + player?.PlayerName ?? string.Empty); } } @@ -792,12 +781,11 @@ namespace CS2_SimpleAdmin if (SilentPlayers.Contains(caller.Slot)) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_tp_message", caller.PlayerName, player.PlayerName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_tp_message", + caller.PlayerName, + player.PlayerName ?? string.Empty); } }); } @@ -837,12 +825,11 @@ namespace CS2_SimpleAdmin if (SilentPlayers.Contains(caller.Slot)) return; foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) { - using (new WithTemporaryCulture(controller.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_bring_message", caller.PlayerName, player.PlayerName]); - controller.PrintToChat(sb.ToString()); - } + if (_localizer != null) + controller.SendLocalizedMessage(_localizer, + "sa_admin_bring_message", + caller.PlayerName, + player.PlayerName ?? string.Empty); } }); } diff --git a/Database/Database.cs b/Database/Database.cs index fd3f8d0..250dc50 100644 --- a/Database/Database.cs +++ b/Database/Database.cs @@ -15,8 +15,7 @@ public class Database(string dbConnectionString) } 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; } } diff --git a/Events.cs b/Events.cs index 8213302..2a6a553 100644 --- a/Events.cs +++ b/Events.cs @@ -12,6 +12,8 @@ namespace CS2_SimpleAdmin; public partial class CS2_SimpleAdmin { + private int _getIpTryCount = 0; + private void RegisterEvents() { RegisterListener(OnMapStart); @@ -22,9 +24,9 @@ public partial class CS2_SimpleAdmin 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; @@ -35,10 +37,16 @@ public partial class CS2_SimpleAdmin if (string.IsNullOrEmpty(ipAddress) || ipAddress.StartsWith("0.0.0")) { - OnGameServerSteamAPIActivated(); - return; + if (_getIpTryCount < 12) + { + _getIpTryCount++; + OnGameServerSteamAPIActivated(); + return; + } } + _getIpTryCount = 0; + var address = $"{ipAddress}:{ConVar.Find("hostport")?.GetPrimitiveValue()}"; var hostname = ConVar.Find("hostname")!.StringValue; @@ -72,9 +80,10 @@ public partial class CS2_SimpleAdmin if (ServerId != null) { - Server.NextFrame(() => ReloadAdmins(null)); + await Server.NextFrameAsync(() => ReloadAdmins(null)); } - + + _serverLoaded = true; } catch (Exception ex) { @@ -186,8 +195,10 @@ public partial class CS2_SimpleAdmin { await using var connection = await _database.GetConnectionAsync(); - const string query = @"INSERT IGNORE INTO `sa_players_ips` (steamid, address) - VALUES (@SteamID, @IPAddress)"; + const string query = """ + INSERT INTO `sa_players_ips` (steamid, address) + VALUES (@SteamID, @IPAddress) ON DUPLICATE KEY UPDATE `used_at` = CURRENT_TIMESTAMP + """; await connection.ExecuteAsync(query, new { @@ -361,8 +372,8 @@ public partial class CS2_SimpleAdmin public void OnMapStart(string mapName) { - if (Config.ReloadAdminsEveryMapChange && ServerId != null) - AddTimer(2.0f, () => ReloadAdmins(null)); + if (Config.ReloadAdminsEveryMapChange && _serverLoaded && ServerId != null) + AddTimer(3.0f, () => ReloadAdmins(null)); var path = Path.GetDirectoryName(ModuleDirectory); if (Directory.Exists(path + "/CS2-Tags")) @@ -377,72 +388,6 @@ public partial class CS2_SimpleAdmin _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()}"; - var hostname = ConVar.Find("hostname")!.StringValue; - - Task.Run(async () => - { - try - { - await using var connection = await _database.GetConnectionAsync(); - var addressExists = await connection.ExecuteScalarAsync( - "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( - "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, () => { #if DEBUG @@ -471,12 +416,17 @@ public partial class CS2_SimpleAdmin try { await banManager.CheckOnlinePlayers(onlinePlayers); + if (Config.TimeMode == 0) { await muteManager.CheckOnlineModeMutes(onlinePlayers); } } - catch { } + catch(Exception) + { + Logger.LogError("Unable to check bans for online players"); + + } } await muteManager.ExpireOldMutes(); @@ -509,9 +459,11 @@ public partial class CS2_SimpleAdmin 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); diff --git a/Extensions/PlayerExtensions.cs b/Extensions/PlayerExtensions.cs index 8acc0ab..7cebb2b 100644 --- a/Extensions/PlayerExtensions.cs +++ b/Extensions/PlayerExtensions.cs @@ -1,8 +1,10 @@ using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Entities; using CounterStrikeSharp.API.Modules.Memory; +using Microsoft.Extensions.Localization; using System.Text; using Vector = CounterStrikeSharp.API.Modules.Utils.Vector; @@ -193,4 +195,20 @@ public static class PlayerExtensions if (pawn.Health <= 0) 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); + } + } + } + } \ No newline at end of file diff --git a/Helper.cs b/Helper.cs index f190498..20a88d2 100644 --- a/Helper.cs +++ b/Helper.cs @@ -64,13 +64,13 @@ namespace CS2_SimpleAdmin public static List GetValidPlayers() { return Utilities.GetPlayers().FindAll(p => p is - { IsBot: false, IsHLTV: false }); + { IsValid: true, IsBot: false, Connected: PlayerConnectedState.PlayerConnected }); } public static IEnumerable GetValidPlayersWithBots() { 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; } + public static string[] SeparateLines(string message) + { + return message.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None); + } + public static string GetServerIp() { var network_system = NativeAPI.GetValveInterface(0, "NetworkSystemVersion001"); diff --git a/Managers/BanManager.cs b/Managers/BanManager.cs index bfb43cd..4446e31 100644 --- a/Managers/BanManager.cs +++ b/Managers/BanManager.cs @@ -389,9 +389,9 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf { var currentTime = DateTime.UtcNow.ToLocalTime(); - await using var connection = await database.GetConnectionAsync(); try { + await using var connection = await database.GetConnectionAsync(); /* string sql = ""; await using MySqlConnection connection = await _database.GetConnectionAsync(); diff --git a/Managers/PermissionManager.cs b/Managers/PermissionManager.cs index 0b06870..926cd01 100644 --- a/Managers/PermissionManager.cs +++ b/Managers/PermissionManager.cs @@ -5,7 +5,6 @@ using Microsoft.Extensions.Logging; using MySqlConnector; using Newtonsoft.Json; using System.Collections.Concurrent; -using Serilog.Core; namespace CS2_SimpleAdmin; @@ -263,7 +262,7 @@ public class PermissionManager(Database.Database database) { var groupsData = await GetAllGroupsData(); - var jsonStructure = new Dictionary(); + var jsonData = new Dictionary(); foreach (var kvp in groupsData) { @@ -273,11 +272,12 @@ public class PermissionManager(Database.Database database) ["immunity"] = kvp.Value.Item2 }; - jsonStructure[kvp.Key] = groupData; + jsonData[kvp.Key] = groupData; } - var json = JsonConvert.SerializeObject(jsonStructure, Formatting.Indented); - await File.WriteAllTextAsync(CS2_SimpleAdmin.Instance.ModuleDirectory + "/data/groups.json", json); + var json = JsonConvert.SerializeObject(jsonData, Formatting.Indented); + 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); 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) diff --git a/VERSION b/VERSION index fc11999..6dcb824 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.5.0a \ No newline at end of file +1.5.1a \ No newline at end of file