- 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 readonly Dictionary<string, int> VoteAnswers = [];
private static bool _serverLoaded;
private static readonly HashSet<int> GodPlayers = [];
private static readonly HashSet<int> SilentPlayers = [];
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 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<CS2_SimpleAdmin
if (hotReload)
{
_serverLoaded = false;
OnMapStart(string.Empty);
}

View File

@@ -10,7 +10,7 @@
</PropertyGroup>
<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="Discord.Net.Webhook" Version="3.15.2" />
<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.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);
}
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}
}

View File

@@ -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();

View File

@@ -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);
}
}
}

View File

@@ -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);
}
});
}

View File

@@ -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;
}
}

110
Events.cs
View File

@@ -12,6 +12,8 @@ namespace CS2_SimpleAdmin;
public partial class CS2_SimpleAdmin
{
private int _getIpTryCount = 0;
private void RegisterEvents()
{
RegisterListener<Listeners.OnMapStart>(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<int>()}";
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<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, () =>
{
#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);

View File

@@ -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);
}
}
}
}

View File

@@ -64,13 +64,13 @@ namespace CS2_SimpleAdmin
public static List<CCSPlayerController> GetValidPlayers()
{
return Utilities.GetPlayers().FindAll(p => p is
{ IsBot: false, IsHLTV: false });
{ IsValid: true, IsBot: false, Connected: PlayerConnectedState.PlayerConnected });
}
public static IEnumerable<CCSPlayerController?> 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");

View File

@@ -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();

View File

@@ -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<string, object>();
var jsonData = new Dictionary<string, object>();
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)

View File

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