From 5668c0ad7bdb680a87ccc9cced688b11b1bb560a Mon Sep 17 00:00:00 2001 From: Ktm <53643730+1370533448@users.noreply.github.com> Date: Sun, 17 Nov 2024 03:41:30 +0800 Subject: [PATCH 1/2] Update zh-Hans.json Incorrect translation of time and reason leads to incorrect display --- CS2-SimpleAdmin/lang/zh-Hans.json | 134 +++++++++++++++--------------- 1 file changed, 66 insertions(+), 68 deletions(-) diff --git a/CS2-SimpleAdmin/lang/zh-Hans.json b/CS2-SimpleAdmin/lang/zh-Hans.json index 6c73ac6..c2d2f68 100644 --- a/CS2-SimpleAdmin/lang/zh-Hans.json +++ b/CS2-SimpleAdmin/lang/zh-Hans.json @@ -1,11 +1,11 @@ { "sa_title": "SimpleAdmin", "sa_prefix": "{lightred}[SA] {default}", - + "sa_unknown": "未知", "sa_no_permission": "您没有权限使用此命令。", - "sa_ban_max_duration_exceeded": "禁令持续时间不能超过{lightred}{0}{default}分钟。", - "sa_ban_perm_restricted": "您没有永久封禁的权限。", + "sa_ban_max_duration_exceeded": "禁止时长不能超过 {lightred}{0}{default} 分钟。", + "sa_ban_perm_restricted": "您没有永久禁止权限。", "sa_admin_add": "添加管理员", "sa_admin_remove": "移除管理员", @@ -15,7 +15,7 @@ "sa_noclip": "穿墙模式", "sa_respawn": "重生", "sa_give_weapon": "给予武器", - "sa_strip_weapons": "剥夺武器", + "sa_strip_weapons": "移除武器", "sa_freeze": "冻结", "sa_set_hp": "设置生命值", "sa_set_speed": "设置速度", @@ -23,22 +23,22 @@ "sa_set_money": "设置金钱", "sa_changemap": "更换地图", - "sa_restart_game": "重启游戏", + "sa_restart_game": "重新开始游戏", "sa_team_ct": "CT", "sa_team_t": "T", "sa_team_swap": "交换", - "sa_team_spec": "观战", + "sa_team_spec": "观察者", "sa_slap": "掌掴", - "sa_slay": "杀死", + "sa_slay": "击杀", "sa_kick": "踢出", - "sa_ban": "封禁", + "sa_ban": "禁止", "sa_gag": "禁言", "sa_mute": "静音", "sa_silence": "沉默", "sa_warn": "警告", - "sa_team_force": "强制队伍", + "sa_team_force": "强制分队", "sa_menu_custom_commands": "自定义命令", "sa_menu_server_manage": "服务器管理", @@ -47,87 +47,85 @@ "sa_menu_players_manage": "玩家管理", "sa_menu_disconnected_title": "最近的玩家", "sa_menu_disconnected_action_title": "选择操作", - "sa_menu_pluginsmanager_title": "管理插件", + "sa_menu_pluginsmanager_title": "插件管理", "sa_player": "玩家", "sa_console": "控制台", "sa_steamid": "SteamID", - "sa_duration": "持续时间", + "sa_duration": "时长", "sa_reason": "原因", "sa_admin": "管理员", "sa_permanent": "永久", - "sa_discord_penalty_ban": "封禁已记录", - "sa_discord_penalty_mute": "禁言已记录", - "sa_discord_penalty_gag": "禁言已记录", - "sa_discord_penalty_silence": "禁声已记录", - "sa_discord_penalty_warn": "警告已注册", - "sa_discord_penalty_unknown": "未知已记录", + "sa_discord_penalty_ban": "禁止记录", + "sa_discord_penalty_mute": "静音记录", + "sa_discord_penalty_gag": "禁言记录", + "sa_discord_penalty_silence": "沉默记录", + "sa_discord_penalty_warn": "警告记录", + "sa_discord_penalty_unknown": "未知记录", - "sa_player_penalty_chat_active": "{lightred}您的聊天已被封锁到: {grey}{0}", - - "sa_player_penalty_info_active_mute": "➔ 静音 [{lightred}❌{default}] - 到期 [{lightred}{0}{default}]", - "sa_player_penalty_info_active_gag": "➔ 禁言 [{lightred}❌{default}] - 到期 [{lightred}{0}{default}]", - "sa_player_penalty_info_active_silence": "➔ 沉默 [{lightred}❌{default}] - 到期 [{lightred}{0}{default}]", - "sa_player_penalty_info_active_warn": "➔ 警告 [{lightred}❌{default}] - 到期 [{lightred}{0}{default}] - 原因 [{lightred}{1}{default}]", + "sa_player_penalty_info_active_mute": "➔ 静音 [{lightred}❌{default}] - 将于 [{lightred}{0}{default}] 过期", + "sa_player_penalty_info_active_gag": "➔ 禁言 [{lightred}❌{default}] - 将于 [{lightred}{0}{default}] 过期", + "sa_player_penalty_info_active_silence": "➔ 沉默 [{lightred}❌{default}] - 将于 [{lightred}{0}{default}] 过期", + "sa_player_penalty_info_active_warn": "➔ 警告 [{lightred}❌{default}] - 将于 [{lightred}{0}{default}] 过期 - 原因 [{lightred}{1}{default}]", "sa_player_penalty_info_no_active_mute": "➔ 静音 [{lime}✔{default}]", "sa_player_penalty_info_no_active_gag": "➔ 禁言 [{lime}✔{default}]", "sa_player_penalty_info_no_active_silence": "➔ 沉默 [{lime}✔{default}]", "sa_player_penalty_info_no_active_warn": "➔ 警告 [{lime}✔{default}]", - "sa_player_penalty_info": "===========================\n玩家处罚信息 {lightred}{0}{default},\n禁言次数: {lightred}{1}{default}, 禁言次数: {lightred}{2}{default}, 静音次数: {lightred}{3}{default}, 沉默次数: {lightred}{4}{default}, 警告次数: {lightred}{5}{default}\n当前处罚:\n{6}\n当前警告:\n{7}\n===========================", - "sa_admin_penalty_info": "{grey}玩家处罚信息 {lightred}{0}{grey}, 禁言: {lightred}{1}{grey}, 禁言: {lightred}{2}{grey}, 静音: {lightred}{3}{grey}, 沉默: {lightred}{4}{grey}, 警告: {lightred}{5}", - "sa_player_ban_message_time": "你因为{lightred}{0}{default}的原因被{lightred}{1}{default}禁止{lightred}{2}{default}分钟!", - "sa_player_ban_message_perm": "你因为{lightred}{0}{default}的原因被{lightred}{1}{default}永久禁止!", - "sa_player_kick_message": "你因为{lightred}{0}{default}的原因被{lightred}{1}{default}踢出!", - "sa_player_gag_message_time": "你因为{lightred}{0}{default}的原因被{lightred}{2}{default}禁言{lightred}{1}{default}分钟!", - "sa_player_gag_message_perm": "你因为{lightred}{0}{default}的原因被{lightred}{1}{default}永久禁言!", - "sa_player_mute_message_time": "你因为{lightred}{0}{default}的原因被{lightred}{2}{default}禁声{lightred}{1}{default}分钟!", - "sa_player_mute_message_perm": "你因为{lightred}{0}{default}的原因被{lightred}{1}{default}永久禁声!", - "sa_player_silence_message_time": "你因为{lightred}{0}{default}的原因被{lightred}{2}{default}禁止发言{lightred}{1}{default}分钟!", - "sa_player_silence_message_perm": "你因为{lightred}{0}{default}的原因被{lightred}{1}{default}永久禁止发言!", - "sa_player_warn_message_time": "您因 {lightred}{0}{default} 被 {lightred}{1}{default} 分钟内由 {lightred}{2}{default} 警告!", - "sa_player_warn_message_perm": "您因 {lightred}{0}{default} 被 {lightred}{1}{default} 永久警告!", - "sa_admin_ban_message_time": "{lightred}{0}{default} 因为 {lightred}{1}{default} 被 {lightred}{2}{default} 禁言 {lightred}{3}{default} 分钟!", - "sa_admin_ban_message_perm": "{lightred}{0}{default} 因为 {lightred}{1}{default} 被永久禁言 {lightred}{2}{default}!", - "sa_admin_kick_message": "{lightred}{0}{default} 因为 {lightred}{1}{default} 被踢出!", - "sa_admin_gag_message_time": "{lightred}{0}{default} 因为 {lightred}{1}{default} 被 {lightred}{2}{default} 禁言 {lightred}{3}{default} 分钟!", - "sa_admin_gag_message_perm": "{lightred}{0}{default} 因为 {lightred}{1}{default} 被永久禁言 {lightred}{2}{default}!", - "sa_admin_mute_message_time": "{lightred}{0}{default} 因为 {lightred}{1}{default} 的声音被 {lightred}{2}{default} 禁言 {lightred}{3}{default} 分钟!", - "sa_admin_mute_message_perm": "{lightred}{0}{default} 因为 {lightred}{1}{default} 的声音被永久禁言 {lightred}{2}{default}!", - "sa_admin_silence_message_time": "{lightred}{0}{default} 因为 {lightred}{1}{default} 被 {lightred}{2}{default} 禁言 {lightred}{3}{default} 分钟!", - "sa_admin_silence_message_perm": "{lightred}{0}{default} 因为 {lightred}{1}{default} 被永久禁言 {lightred}{2}{default}!", - "sa_admin_warn_message_time": "{lightred}{0}{default} 因为 {lightred}{1}{default} 被警告 {lightred}{2}{default} {lightred}{3}{default} 分钟!", - "sa_admin_warn_message_perm": "{lightred}{0}{default} 因为 {lightred}{1}{default} 被永久警告 {lightred}{2}{default}!", + "sa_player_penalty_info": "===========================\n玩家 {lightred}{0}{default} 的处罚信息,\n禁止次数: {lightred}{1}{default}, 禁言次数: {lightred}{2}{default}, 静音次数: {lightred}{3}{default}, 沉默次数: {lightred}{4}{default}, 警告次数: {lightred}{5}{default}\n活跃的处罚:\n{6}\n活跃的警告:\n{7}\n===========================", + "sa_admin_penalty_info": "{grey}玩家 {lightred}{0}{grey} 的处罚信息, 禁止: {lightred}{1}{grey}, 禁言: {lightred}{2}{grey}, 静音: {lightred}{3}{grey}, 沉默: {lightred}{4}{grey}, 警告: {lightred}{5}", + "sa_player_ban_message_time": "您已被 {lightred}{0}{default} 因 {lightred}{2}{default} 禁止 {lightred}{1}{default} 分钟!", + "sa_player_ban_message_perm": "您已被 {lightred}{0}{default} 因 {lightred}{1}{default} 永久禁止!", + "sa_player_kick_message": "您已被 {lightred}{0}{default} 因 {lightred}{1}{default} 踢出!", + "sa_player_gag_message_time": "您已被 {lightred}{0}{default} 因 {lightred}{2}{default} 禁言 {lightred}{1}{default} 分钟!", + "sa_player_gag_message_perm": "您已被 {lightred}{0}{default} 因 {lightred}{1}{default} 永久禁言!", + "sa_player_mute_message_time": "您已被 {lightred}{0}{default} 因 {lightred}{2}{default} 静音 {lightred}{1}{default} 分钟!", + "sa_player_mute_message_perm": "您已被 {lightred}{0}{default} 因 {lightred}{1}{default} 永久静音!", + "sa_player_silence_message_time": "您已被 {lightred}{0}{default} 因 {lightred}{2}{default} 沉默 {lightred}{1}{default} 分钟!", + "sa_player_silence_message_perm": "您已被 {lightred}{0}{default} 因 {lightred}{1}{default} 永久沉默!", + "sa_player_warn_message_time": "您已被 {lightred}{0}{default} 因 {lightred}{2}{default} 警告 {lightred}{1}{default} 分钟!", + "sa_player_warn_message_perm": "您已被 {lightred}{0}{default} 因 {lightred}{1}{default} 永久警告!", + "sa_admin_ban_message_time": "{lightred}{0}{default} 禁止了 {lightred}{1}{default} 因 {lightred}{2}{default} 共 {lightred}{3}{default} 分钟!", + "sa_admin_ban_message_perm": "{lightred}{0}{default} 永久禁止了 {lightred}{1}{default} 因 {lightred}{2}{default}!", + "sa_admin_kick_message": "{lightred}{0}{default} 踢出了 {lightred}{1}{default} 因 {lightred}{2}{default}!", + "sa_admin_gag_message_time": "{lightred}{0}{default} 禁言了 {lightred}{1}{default} 因 {lightred}{2}{default} 共 {lightred}{3}{default} 分钟!", + "sa_admin_gag_message_perm": "{lightred}{0}{default} 永久禁言了 {lightred}{1}{default} 因 {lightred}{2}{default}!", + "sa_admin_mute_message_time": "{lightred}{0}{default} 静音了 {lightred}{1}{default} 因 {lightred}{2}{default} 共 {lightred}{3}{default} 分钟!", + "sa_admin_mute_message_perm": "{lightred}{0}{default} 永久静音了 {lightred}{1}{default} 因 {lightred}{2}{default}!", + "sa_admin_silence_message_time": "{lightred}{0}{default} 沉默了 {lightred}{1}{default} 因 {lightred}{2}{default} 共 {lightred}{3}{default} 分钟!", + "sa_admin_silence_message_perm": "{lightred}{0}{default} 永久沉默了 {lightred}{1}{default} 因 {lightred}{2}{default}!", + "sa_admin_warn_message_time": "{lightred}{0}{default} 警告了 {lightred}{1}{default} 因 {lightred}{2}{default} 共 {lightred}{3}{default} 分钟!", + "sa_admin_warn_message_perm": "{lightred}{0}{default} 永久警告了 {lightred}{1}{default} 因 {lightred}{2}{default}!", "sa_admin_give_message": "{lightred}{0}{default} 给了 {lightred}{1}{default} {lightred}{2}{default}!", - "sa_admin_strip_message": "{lightred}{0}{default} 拿走了 {lightred}{1}{default} 的所有武器!", - "sa_admin_hp_message": "{lightred}{0}{default} 改变了 {lightred}{1}{default} 的生命值!", - "sa_admin_speed_message": "{lightred}{0}{default} 改变了 {lightred}{1}{default} 的速度!", - "sa_admin_gravity_message": "{lightred}{0}{default} 改变了 {lightred}{1}{default} 的重力!", - "sa_admin_money_message": "{lightred}{0}{default} 改变了 {lightred}{1}{default} 的金钱!", - "sa_admin_god_message": "{lightred}{0}{default} 改变了 {lightred}{1}{default} 的上帝模式!", - "sa_admin_slay_message": "{lightred}{0}{default} 杀死了 {lightred}{1}{default}!", - "sa_admin_slap_message": "{lightred}{0}{default} 扇了 {lightred}{1}{default} 一巴掌!", - "sa_admin_changemap_message": "{lightred}{0}{default} 更改了地图为 {lightred}{1}{default}!", - "sa_admin_noclip_message": "{lightred}{0}{default} 为 {lightred}{1}{default} 切换了 noclip!", + "sa_admin_strip_message": "{lightred}{0}{default} 移除了 {lightred}{1}{default} 的所有武器!", + "sa_admin_hp_message": "{lightred}{0}{default} 修改了 {lightred}{1}{default} 的生命值!", + "sa_admin_speed_message": "{lightred}{0}{default} 修改了 {lightred}{1}{default} 的速度!", + "sa_admin_gravity_message": "{lightred}{0}{default} 修改了 {lightred}{1}{default} 的重力!", + "sa_admin_money_message": "{lightred}{0}{default} 修改了 {lightred}{1}{default} 的金钱!", + "sa_admin_god_message": "{lightred}{0}{default} 切换了 {lightred}{1}{default} 的上帝模式!", + "sa_admin_slay_message": "{lightred}{0}{default} 击杀了 {lightred}{1}{default}!", + "sa_admin_slap_message": "{lightred}{0}{default} 掌掴了 {lightred}{1}{default}!", + "sa_admin_changemap_message": "{lightred}{0}{default} 将地图更换为 {lightred}{1}{default}!", + "sa_admin_noclip_message": "{lightred}{0}{default} 切换了 {lightred}{1}{default} 的穿墙模式!", "sa_admin_freeze_message": "{lightred}{0}{default} 冻结了 {lightred}{1}{default}!", "sa_admin_unfreeze_message": "{lightred}{0}{default} 解冻了 {lightred}{1}{default}!", - "sa_admin_rename_message": "{lightred}{0}{default} 更改了 {lightred}{1}{default} 的昵称为 {lightred}{2}{default}!", - "sa_admin_respawn_message": "{lightred}{0}{default} 重新生成了 {lightred}{1}{default}!", - "sa_admin_tp_message": "{lightred}{0}{default} 传送到了 {lightred}{1}{default}!", - "sa_admin_bring_message": "{lightred}{0}{default} 将 {lightred}{1}{default} 传送到了自己身边!", - "sa_admin_team_message": "{lightred}{0}{default} 将 {lightred}{1}{default} 转移到了 {lightred}{2}{default} 队伍!", + "sa_admin_rename_message": "{lightred}{0}{default} 将 {lightred}{1}{default} 的昵称改为 {lightred}{2}{default}!", + "sa_admin_respawn_message": "{lightred}{0}{default} 复活了 {lightred}{1}{default}!", + "sa_admin_tp_message": "{lightred}{0}{default} 传送到 {lightred}{1}{default}!", + "sa_admin_bring_message": "{lightred}{0}{default} 将 {lightred}{1}{default} 传送到自己!", + "sa_admin_team_message": "{lightred}{0}{default} 将 {lightred}{1}{default} 转移到 {lightred}{2}{default} 队伍!", "sa_admin_warns_menu_title": "{gold}{0} {lime}警告", - "sa_admin_warns_unwarn": "{lime}成功{default} 取消了对 {gold}{0}{default} 的警告 {gold}{1}{default}!", + "sa_admin_warns_unwarn": "{lime}成功移除警告{default} {gold}{0} 对于 {gold}{1}{default}!", "sa_admin_vote_menu_title": "{lime}投票 {gold}{0}", - "sa_admin_vote_message": "{lightred}{0}{default} 开始为 {lightred}{1}{default} 进行投票", + "sa_admin_vote_message": "{lightred}{0}{default} 发起了 [{lightred}{1}{default}] 的投票", "sa_admin_vote_message_results": "{lime}投票结果 {gold}{0}", "sa_admin_vote_message_results_answer": "{lime}{0} {default}- {gold}{1}", "sa_adminsay_prefix": "{RED}管理员: {lightred}{0}{default}", "sa_adminchat_template_admin": "{LIME}(管理员) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(玩家) {lightred}{0}{default}: {lightred}{1}{default}", - "sa_discord_log_command": "**{0}** 在服务器 `HOSTNAME` 上发出了 `{1}` 命令", - "sa_menu_pluginsmanager_loaded": "{lime}已启用 {default}插件 {lime}{0}", - "sa_menu_pluginsmanager_unloaded": "{lightred}已禁用 {default}插件 {lightred}{0}" -} \ No newline at end of file + "sa_discord_log_command": "**{0}** 在服务器 `HOSTNAME` 上执行了命令 `{1}`", + "sa_menu_pluginsmanager_loaded": "{lime}激活了 {default}插件 {lime}{0}", + "sa_menu_pluginsmanager_unloaded": "{lightred}停用了 {default}插件 {lightred}{0}" +} From 023e1a031bc96c79b852b5d956df7abbc899fb3d Mon Sep 17 00:00:00 2001 From: Dawid Bepierszcz <41084667+daffyyyy@users.noreply.github.com> Date: Tue, 26 Nov 2024 23:37:49 +0100 Subject: [PATCH 2/2] 1.6.9c - Added config variable to enable/disable checking for banned multiaccounts by ip `CheckMultiAccountsByIp` - Fixed css_speed after player hurt - Finally fixed vote kick (callvote) - Small fix for admins loading from database --- CS2-SimpleAdmin/CS2-SimpleAdmin.cs | 2 +- CS2-SimpleAdmin/Commands/basecommands.cs | 6 +-- CS2-SimpleAdmin/Config.cs | 7 +++- CS2-SimpleAdmin/Events.cs | 28 +++++++------- .../Extensions/PlayerExtensions.cs | 3 +- CS2-SimpleAdmin/Helper.cs | 17 +++++++++ CS2-SimpleAdmin/Managers/BanManager.cs | 37 ++++++++++++++++++- CS2-SimpleAdmin/Managers/PermissionManager.cs | 13 +++---- CS2-SimpleAdmin/Managers/PlayerManager.cs | 20 +++++++--- CS2-SimpleAdmin/Managers/ServerManager.cs | 6 +-- CS2-SimpleAdmin/VERSION | 2 +- CS2-SimpleAdminApi/PlayerInfo.cs | 6 +-- 12 files changed, 106 insertions(+), 41 deletions(-) diff --git a/CS2-SimpleAdmin/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin/CS2-SimpleAdmin.cs index d03c406..b5b5dec 100644 --- a/CS2-SimpleAdmin/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin/CS2-SimpleAdmin.cs @@ -19,7 +19,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.6.9a"; + public override string ModuleVersion => "1.6.9c"; public override void Load(bool hotReload) { diff --git a/CS2-SimpleAdmin/Commands/basecommands.cs b/CS2-SimpleAdmin/Commands/basecommands.cs index deb77db..0351bdb 100644 --- a/CS2-SimpleAdmin/Commands/basecommands.cs +++ b/CS2-SimpleAdmin/Commands/basecommands.cs @@ -378,11 +378,11 @@ public partial class CS2_SimpleAdmin await Server.NextWorldUpdateAsync(() => { if (!string.IsNullOrEmpty(adminsFile)) - AddTimer(1.0f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json")); + AddTimer(0.5f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json")); if (!string.IsNullOrEmpty(groupsFile)) - AddTimer(1.5f, () => AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json")); + AddTimer(0.8f, () => AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json")); if (!string.IsNullOrEmpty(adminsFile)) - AddTimer(2.0f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json")); + AddTimer(1.1f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json")); }); }); diff --git a/CS2-SimpleAdmin/Config.cs b/CS2-SimpleAdmin/Config.cs index 6e0f990..d2bddd7 100644 --- a/CS2-SimpleAdmin/Config.cs +++ b/CS2-SimpleAdmin/Config.cs @@ -224,14 +224,17 @@ public class OtherSettings [JsonPropertyName("UserMessageGagChatType")] public bool UserMessageGagChatType { get; set; } = false; + + [JsonPropertyName("CheckMultiAccountsByIp")] + public bool CheckMultiAccountsByIp { get; set; } = true; [JsonPropertyName("AdditionalCommandsToLog")] - public List AdditionalCommandsToLog = new(); + public List AdditionalCommandsToLog { get; set; } = new(); } public class CS2_SimpleAdminConfig : BasePluginConfig { - [JsonPropertyName("ConfigVersion")] public override int Version { get; set; } = 23; + [JsonPropertyName("ConfigVersion")] public override int Version { get; set; } = 24; [JsonPropertyName("DatabaseHost")] public string DatabaseHost { get; set; } = ""; diff --git a/CS2-SimpleAdmin/Events.cs b/CS2-SimpleAdmin/Events.cs index 911d1a1..7f18e82 100644 --- a/CS2-SimpleAdmin/Events.cs +++ b/CS2-SimpleAdmin/Events.cs @@ -128,7 +128,7 @@ public partial class CS2_SimpleAdmin if (player == null || !player.IsValid || player.IsBot) return HookResult.Continue; - + new PlayerManager().LoadPlayerData(player); return HookResult.Continue; @@ -147,7 +147,7 @@ public partial class CS2_SimpleAdmin foreach (var player in PlayersInfo.Values) { - player.DiePosition = null; + player.DiePosition = default; } AddTimer(0.41f, () => @@ -215,8 +215,6 @@ public partial class CS2_SimpleAdmin if (target == null || !target.IsValid || target.Connected != PlayerConnectedState.PlayerConnected) return HookResult.Continue; - Logger.LogInformation($"{player.PlayerName} {AdminManager.GetPlayerImmunity(player).ToString()} probuje wywalic {target.PlayerName} {AdminManager.GetPlayerImmunity(target).ToString()}"); - return !player.CanTarget(target) ? HookResult.Stop : HookResult.Continue; } } @@ -357,9 +355,10 @@ public partial class CS2_SimpleAdmin if (player is null || @event.Attacker is null || !player.PawnIsAlive || player.PlayerPawn.Value == null) return HookResult.Continue; + if (SpeedPlayers.TryGetValue(player.Slot, out var speedPlayer)) - player.SetSpeed(speedPlayer); + AddTimer(0.15f, () => player.SetSpeed(speedPlayer)); if (!GodPlayers.Contains(player.Slot)) return HookResult.Continue; @@ -373,26 +372,29 @@ public partial class CS2_SimpleAdmin public HookResult OnPlayerDeath(EventPlayerDeath @event, GameEventInfo info) { var player = @event.Userid; - + if (player?.UserId == null || !player.IsValid || player.IsHLTV || player.Connected != PlayerConnectedState.PlayerConnected) return HookResult.Continue; SpeedPlayers.Remove(player.Slot); GravityPlayers.Remove(player); - if (!PlayersInfo.ContainsKey(player.UserId.Value)) + if (!PlayersInfo.ContainsKey(player.UserId.Value) || @event.Attacker == null) return HookResult.Continue; + + var playerPosition = player.PlayerPawn.Value?.AbsOrigin; + var playerRotation = player.PlayerPawn.Value?.AbsRotation; PlayersInfo[player.UserId.Value].DiePosition = new DiePosition( new Vector( - player.PlayerPawn.Value?.AbsOrigin?.X ?? 0, - player.PlayerPawn.Value?.AbsOrigin?.Y ?? 0, - player.PlayerPawn.Value?.AbsOrigin?.Z ?? 0 + playerPosition?.X ?? 0, + playerPosition?.Y ?? 0, + playerPosition?.Z ?? 0 ), new QAngle( - player.PlayerPawn.Value?.AbsRotation?.X ?? 0, - player.PlayerPawn.Value?.AbsRotation?.Y ?? 0, - player.PlayerPawn.Value?.AbsRotation?.Z ?? 0 + playerRotation?.X ?? 0, + playerRotation?.Y ?? 0, + playerRotation?.Z ?? 0 ) ); diff --git a/CS2-SimpleAdmin/Extensions/PlayerExtensions.cs b/CS2-SimpleAdmin/Extensions/PlayerExtensions.cs index 5419644..de488d5 100644 --- a/CS2-SimpleAdmin/Extensions/PlayerExtensions.cs +++ b/CS2-SimpleAdmin/Extensions/PlayerExtensions.cs @@ -32,7 +32,8 @@ public static class PlayerExtensions return AdminManager.CanPlayerTarget(controller, target) || AdminManager.CanPlayerTarget(new SteamID(controller.SteamID), - new SteamID(target.SteamID)); + new SteamID(target.SteamID)) || + AdminManager.GetPlayerImmunity(controller) >= AdminManager.GetPlayerImmunity(target); } public static void SetSpeed(this CCSPlayerController? controller, float speed) diff --git a/CS2-SimpleAdmin/Helper.cs b/CS2-SimpleAdmin/Helper.cs index 57fa127..3bc2a5d 100644 --- a/CS2-SimpleAdmin/Helper.cs +++ b/CS2-SimpleAdmin/Helper.cs @@ -158,6 +158,23 @@ internal static class Helper // // Server.ExecuteCommand($"kickid {userId} {reason}"); } + + public static void KickPlayer(CCSPlayerController player, NetworkDisconnectionReason reason = NetworkDisconnectionReason.NETWORK_DISCONNECT_KICKED) + { + player.Disconnect(reason); + + // if (!string.IsNullOrEmpty(reason)) + // { + // var escapeChars = reason.IndexOfAny([';', '|']); + // + // if (escapeChars != -1) + // { + // reason = reason[..escapeChars]; + // } + // } + // + // Server.ExecuteCommand($"kickid {userId} {reason}"); + } public static void PrintToCenterAll(string message) { diff --git a/CS2-SimpleAdmin/Managers/BanManager.cs b/CS2-SimpleAdmin/Managers/BanManager.cs index 6cd0013..1cda794 100644 --- a/CS2-SimpleAdmin/Managers/BanManager.cs +++ b/CS2-SimpleAdmin/Managers/BanManager.cs @@ -123,7 +123,11 @@ internal class BanManager(Database.Database? database) try { - var sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode ? """ + string sql; + + if (CS2_SimpleAdmin.Instance.Config.OtherSettings.CheckMultiAccountsByIp) + { + sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode ? """ SELECT COALESCE(( SELECT COUNT(*) FROM sa_bans @@ -172,7 +176,36 @@ internal class BanManager(Database.Database? database) ) ), 0) AS TotalBanCount; """; - + } + else + { + sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode ? """ + UPDATE sa_bans + SET player_ip = CASE WHEN player_ip IS NULL THEN @PlayerIP ELSE player_ip END, + player_name = CASE WHEN player_name IS NULL THEN @PlayerName ELSE player_name END + WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) + AND status = 'ACTIVE' + AND (duration = 0 OR ends > @CurrentTime); + + SELECT COUNT(*) FROM sa_bans + WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) + AND status = 'ACTIVE' + AND (duration = 0 OR ends > @CurrentTime); + """ : """ + UPDATE sa_bans + SET player_ip = CASE WHEN player_ip IS NULL THEN @PlayerIP ELSE player_ip END, + player_name = CASE WHEN player_name IS NULL THEN @PlayerName ELSE player_name END + WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) + AND status = 'ACTIVE' + AND (duration = 0 OR ends > @CurrentTime) AND server_id = @ServerId; + + SELECT COUNT(*) FROM sa_bans + WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) + AND status = 'ACTIVE' + AND (duration = 0 OR ends > @CurrentTime) AND server_id = @ServerId; + """; + } + await using var connection = await database.GetConnectionAsync(); var parameters = new diff --git a/CS2-SimpleAdmin/Managers/PermissionManager.cs b/CS2-SimpleAdmin/Managers/PermissionManager.cs index 0643c35..35f25f3 100644 --- a/CS2-SimpleAdmin/Managers/PermissionManager.cs +++ b/CS2-SimpleAdmin/Managers/PermissionManager.cs @@ -90,13 +90,12 @@ public class PermissionManager(Database.Database? database) )) .ToList(); - /* - foreach (var player in groupedPlayers) - { - Console.WriteLine($"Player SteamID: {player.PlayerSteamId}, Name: {player.PlayerName}, Flags: {string.Join(", ", player.Flags)}, Immunity: {player.Immunity}, Ends: {player.Ends}"); - } - */ - + + // foreach (var player in groupedPlayers) + // { + // Console.WriteLine($"Player SteamID: {player.PlayerSteamId}, Name: {player.PlayerName}, Flags: {string.Join(", ", player.Flags)}, Immunity: {player.Immunity}, Ends: {player.Ends}"); + // } + List<(string, string, List, int, DateTime?)> filteredFlagsWithImmunity = []; // Add the grouped players to the list diff --git a/CS2-SimpleAdmin/Managers/PlayerManager.cs b/CS2-SimpleAdmin/Managers/PlayerManager.cs index 41ca9d4..0fda5de 100644 --- a/CS2-SimpleAdmin/Managers/PlayerManager.cs +++ b/CS2-SimpleAdmin/Managers/PlayerManager.cs @@ -16,15 +16,26 @@ public class PlayerManager public void LoadPlayerData(CCSPlayerController player) { - if (player.IsBot || string.IsNullOrEmpty(player.IpAddress) || player.IpAddress.Contains("127.0.0.1") - || !player.UserId.HasValue) + if (player.IsBot || string.IsNullOrEmpty(player.IpAddress) || player.IpAddress.Contains("127.0.0.1")) return; + + if (!player.UserId.HasValue) + { + Helper.KickPlayer(player, NetworkDisconnectionReason.NETWORK_DISCONNECT_REJECT_INVALIDCONNECTION); + return; + } var ipAddress = player.IpAddress?.Split(":")[0]; CS2_SimpleAdmin.PlayersInfo[player.UserId.Value] = new PlayerInfo(player.UserId.Value, player.Slot, new SteamID(player.SteamID), player.PlayerName, ipAddress); + // if (!player.UserId.HasValue) + // { + // Helper.KickPlayer(player, NetworkDisconnectionReason.NETWORK_DISCONNECT_REJECT_INVALIDCONNECTION); + // return; + // } + var userId = player.UserId.Value; // Check if the player's IP or SteamID is in the bannedPlayers list @@ -32,8 +43,7 @@ public class PlayerManager CS2_SimpleAdmin.BannedPlayers.Contains(player.SteamID.ToString())) { // Kick the player if banned - if (player.UserId.HasValue) - Helper.KickPlayer(player.UserId.Value, NetworkDisconnectionReason.NETWORK_DISCONNECT_REJECT_BANNED); + Helper.KickPlayer(player.UserId.Value, NetworkDisconnectionReason.NETWORK_DISCONNECT_REJECT_BANNED); return; } @@ -113,7 +123,7 @@ public class PlayerManager { var victim = Utilities.GetPlayerFromUserid(userId); - if (victim?.UserId == null) return; + if (victim == null || !victim.UserId.HasValue) return; if (CS2_SimpleAdmin.UnlockedCommands) Server.ExecuteCommand($"banid 1 {userId}"); diff --git a/CS2-SimpleAdmin/Managers/ServerManager.cs b/CS2-SimpleAdmin/Managers/ServerManager.cs index 47014d9..8f65298 100644 --- a/CS2-SimpleAdmin/Managers/ServerManager.cs +++ b/CS2-SimpleAdmin/Managers/ServerManager.cs @@ -11,11 +11,11 @@ public class ServerManager public void LoadServerData() { - CS2_SimpleAdmin.Instance.AddTimer(2.0f, () => + CS2_SimpleAdmin.Instance.AddTimer(1.2f, () => { if (CS2_SimpleAdmin.ServerLoaded || CS2_SimpleAdmin.ServerId != null || CS2_SimpleAdmin.Database == null) return; - if (_getIpTryCount > 16 && Helper.GetServerIp().StartsWith("0.0.0.0") || string.IsNullOrEmpty(Helper.GetServerIp())) + if (_getIpTryCount > 32 && Helper.GetServerIp().StartsWith("0.0.0.0") || string.IsNullOrEmpty(Helper.GetServerIp())) { CS2_SimpleAdmin._logger?.LogError("Unable to load server data - can't fetch ip address!"); return; @@ -27,7 +27,7 @@ public class ServerManager { ipAddress = Helper.GetServerIp(); - if (_getIpTryCount <= 16) + if (_getIpTryCount <= 32) { _getIpTryCount++; diff --git a/CS2-SimpleAdmin/VERSION b/CS2-SimpleAdmin/VERSION index f7fba94..919b550 100644 --- a/CS2-SimpleAdmin/VERSION +++ b/CS2-SimpleAdmin/VERSION @@ -1 +1 @@ -1.6.9a \ No newline at end of file +1.6.9c \ No newline at end of file diff --git a/CS2-SimpleAdminApi/PlayerInfo.cs b/CS2-SimpleAdminApi/PlayerInfo.cs index e3d5cb7..7e04841 100644 --- a/CS2-SimpleAdminApi/PlayerInfo.cs +++ b/CS2-SimpleAdminApi/PlayerInfo.cs @@ -28,8 +28,8 @@ public class PlayerInfo( public DiePosition? DiePosition { get; set; } } -public struct DiePosition(Vector? position = null, QAngle? angle = null) +public struct DiePosition(Vector position, QAngle angle) { - public Vector? Position { get; set; } = position; - public QAngle? Angle { get; set; } = angle; + public Vector Position { get; set; } = position; + public QAngle Angle { get; set; } = angle; }