Compare commits

..

1 Commits

Author SHA1 Message Date
Yuriy Petleshkov
bc35e1d744 Merge 84646e4451 into 82b82722a6 2024-10-27 21:26:01 -03:00
28 changed files with 103 additions and 389 deletions

View File

@@ -19,7 +19,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)"); public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)");
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)"; public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
public override string ModuleAuthor => "daffyy & Dliix66"; public override string ModuleAuthor => "daffyy & Dliix66";
public override string ModuleVersion => "1.6.7a"; public override string ModuleVersion => "1.6.5a";
public override void Load(bool hotReload) public override void Load(bool hotReload)
{ {

View File

@@ -10,7 +10,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.284" /> <PackageReference Include="CounterStrikeSharp.API" Version="1.0.276" />
<PackageReference Include="Dapper" Version="2.1.35" /> <PackageReference Include="Dapper" Version="2.1.35" />
<PackageReference Include="MySqlConnector" Version="2.3.7" /> <PackageReference Include="MySqlConnector" Version="2.3.7" />
<PackageReference Include="Newtonsoft.Json" Version="*" /> <PackageReference Include="Newtonsoft.Json" Version="*" />

View File

@@ -77,8 +77,7 @@ public static class RegisterCommands
new CommandMapping("css_prename", CS2_SimpleAdmin.Instance.OnPrenameCommand), new CommandMapping("css_prename", CS2_SimpleAdmin.Instance.OnPrenameCommand),
new CommandMapping("css_respawn", CS2_SimpleAdmin.Instance.OnRespawnCommand), new CommandMapping("css_respawn", CS2_SimpleAdmin.Instance.OnRespawnCommand),
new CommandMapping("css_tp", CS2_SimpleAdmin.Instance.OnGotoCommand), new CommandMapping("css_tp", CS2_SimpleAdmin.Instance.OnGotoCommand),
new CommandMapping("css_bring", CS2_SimpleAdmin.Instance.OnBringCommand), new CommandMapping("css_bring", CS2_SimpleAdmin.Instance.OnBringCommand)
new CommandMapping("css_pluginsmanager", CS2_SimpleAdmin.Instance.OnPluginManagerCommand)
]; ];
public static void InitializeCommands() public static void InitializeCommands()
@@ -159,8 +158,7 @@ public static class RegisterCommands
{ "css_prename", new Command { Aliases = ["css_prename"] } }, { "css_prename", new Command { Aliases = ["css_prename"] } },
{ "css_respawn", new Command { Aliases = ["css_respawn"] } }, { "css_respawn", new Command { Aliases = ["css_respawn"] } },
{ "css_tp", new Command { Aliases = ["css_tp", "css_tpto", "css_goto"] } }, { "css_tp", new Command { Aliases = ["css_tp", "css_tpto", "css_goto"] } },
{ "css_bring", new Command { Aliases = ["css_bring", "css_tphere"] } }, { "css_bring", new Command { Aliases = ["css_bring", "css_tphere"] } }
{ "css_pluginsmanager", new Command { Aliases = ["css_pluginsmanager", "css_pluginmanager"] } }
} }
}; };

View File

@@ -1,4 +1,3 @@
using System.Collections;
using CounterStrikeSharp.API; using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Core.Translations;
@@ -14,9 +13,6 @@ using CS2_SimpleAdminApi;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Globalization; using System.Globalization;
using System.Reflection;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using MenuManager;
namespace CS2_SimpleAdmin; namespace CS2_SimpleAdmin;
@@ -894,76 +890,6 @@ public partial class CS2_SimpleAdmin
RestartGame(caller); RestartGame(caller);
} }
[RequiresPermissions("@css/root")]
[CommandHelper(whoCanExecute: CommandUsage.CLIENT_ONLY)]
public void OnPluginManagerCommand(CCSPlayerController? caller, CommandInfo commandInfo)
{
if (MenuApi == null || caller == null)
return;
var pluginManager = Helper.GetPluginManager();
if (pluginManager == null)
{
Logger.LogError("Unable to access PluginManager.");
return;
}
var getLoadedPluginsMethod = pluginManager.GetType().GetMethod("GetLoadedPlugins", BindingFlags.Public | BindingFlags.Instance);
if (getLoadedPluginsMethod?.Invoke(pluginManager, null) is not IEnumerable plugins)
{
Logger.LogError("Unable to retrieve plugins.");
return;
}
var pluginsMenu = Helper.CreateMenu(Localizer["sa_menu_pluginsmanager_title"]);
foreach (var plugin in plugins)
{
var pluginType = plugin.GetType();
// Accessing each property with the Type of the plugin
var pluginId = pluginType.GetProperty("PluginId")?.GetValue(plugin);
var state = pluginType.GetProperty("State")?.GetValue(plugin)?.ToString();
var path = pluginType.GetProperty("FilePath")?.GetValue(plugin)?.ToString();
path = Path.GetFileName(Path.GetDirectoryName(path));
// Access nested properties within "Plugin" (like ModuleName, ModuleVersion, etc.)
var nestedPlugin = pluginType.GetProperty("Plugin")?.GetValue(plugin);
if (nestedPlugin == null) continue;
var status = state?.ToUpper() != "UNLOADED" ? "ON" : "OFF";
var allowedMenuTypes = new[] { "chat", "console" };
if (!allowedMenuTypes.Contains(Config.MenuConfigs.MenuType) && MenuApi.GetMenuType(caller) >= MenuType.CenterMenu)
status = state?.ToUpper() != "UNLOADED" ? "<font color='lime'>ON</font>" : "<font color='red'>OFF</font>";
var nestedType = nestedPlugin.GetType();
var moduleName = nestedType.GetProperty("ModuleName")?.GetValue(nestedPlugin)?.ToString() ?? "Unknown";
var moduleVersion = nestedType.GetProperty("ModuleVersion")?.GetValue(nestedPlugin)?.ToString();
// var moduleAuthor = nestedType.GetProperty("ModuleAuthor")?.GetValue(nestedPlugin)?.ToString();
// var moduleDescription = nestedType.GetProperty("ModuleDescription")?.GetValue(nestedPlugin)?.ToString();
pluginsMenu?.AddMenuOption($"({status}) [{moduleName} {moduleVersion}]", (_, _) =>
{
if (state?.ToUpper() != "UNLOADED")
{
caller.SendLocalizedMessage(Localizer, "sa_menu_pluginsmanager_unloaded", moduleName);
Server.ExecuteCommand($"css_plugins unload {pluginId}");
}
else
{
caller.SendLocalizedMessage(Localizer, "sa_menu_pluginsmanager_loaded", moduleName);
Server.ExecuteCommand($"css_plugins load {path}");
}
AddTimer(0.1f, () => OnPluginManagerCommand(caller, commandInfo));
});
// Console.WriteLine($"[#{pluginId}:{state?.ToUpper()}]: \"{moduleName ?? "Unknown"}\" ({moduleVersion ?? "Unknown"}) by {moduleAuthor}");
}
pluginsMenu?.Open(caller);
}
public static void RestartGame(CCSPlayerController? admin) public static void RestartGame(CCSPlayerController? admin)
{ {
Helper.LogCommand(admin, "css_restartgame"); Helper.LogCommand(admin, "css_restartgame");

View File

@@ -1,5 +1,5 @@
using System.Globalization;
using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Commands;
using CounterStrikeSharp.API.Modules.Entities.Constants; using CounterStrikeSharp.API.Modules.Entities.Constants;
@@ -10,9 +10,6 @@ namespace CS2_SimpleAdmin;
public partial class CS2_SimpleAdmin public partial class CS2_SimpleAdmin
{ {
internal static readonly Dictionary<int, float> SpeedPlayers = [];
internal static readonly Dictionary<CCSPlayerController, float> GravityPlayers = [];
[RequiresPermissions("@css/slay")] [RequiresPermissions("@css/slay")]
[CommandHelper(minArgs: 1, usage: "<#userid or name>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] [CommandHelper(minArgs: 1, usage: "<#userid or name>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
public void OnSlayCommand(CCSPlayerController? caller, CommandInfo command) public void OnSlayCommand(CCSPlayerController? caller, CommandInfo command)
@@ -268,7 +265,8 @@ public partial class CS2_SimpleAdmin
[CommandHelper(minArgs: 1, usage: "<#userid or name> <speed>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] [CommandHelper(minArgs: 1, usage: "<#userid or name> <speed>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
public void OnSpeedCommand(CCSPlayerController? caller, CommandInfo command) public void OnSpeedCommand(CCSPlayerController? caller, CommandInfo command)
{ {
float.TryParse(command.GetArg(2), NumberStyles.Float, CultureInfo.InvariantCulture, out var speed); var callerName = caller == null ? _localizer?["sa_console"] ?? "Console" : caller.PlayerName;
float.TryParse(command.GetArg(2), out var speed);
var targets = GetTarget(command); var targets = GetTarget(command);
if (targets == null) return; if (targets == null) return;
@@ -297,11 +295,6 @@ public partial class CS2_SimpleAdmin
// Set player's speed // Set player's speed
player.SetSpeed(speed); player.SetSpeed(speed);
if (speed == 1f)
SpeedPlayers.Remove(player.Slot);
else
SpeedPlayers[player.Slot] = speed;
// Log the command // Log the command
if (command == null) if (command == null)
Helper.LogCommand(caller, $"css_speed {(string.IsNullOrEmpty(player.PlayerName) ? player.SteamID.ToString() : player.PlayerName)} {speed}"); Helper.LogCommand(caller, $"css_speed {(string.IsNullOrEmpty(player.PlayerName) ? player.SteamID.ToString() : player.PlayerName)} {speed}");
@@ -320,11 +313,13 @@ public partial class CS2_SimpleAdmin
} }
} }
[ConsoleCommand("css_gravity")]
[RequiresPermissions("@css/slay")] [RequiresPermissions("@css/slay")]
[CommandHelper(minArgs: 1, usage: "<#userid or name> <gravity>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] [CommandHelper(minArgs: 1, usage: "<#userid or name> <gravity>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
public void OnGravityCommand(CCSPlayerController? caller, CommandInfo command) public void OnGravityCommand(CCSPlayerController? caller, CommandInfo command)
{ {
float.TryParse(command.GetArg(2), NumberStyles.Float, CultureInfo.InvariantCulture, out var gravity); var callerName = caller == null ? _localizer?["sa_console"] ?? "Console" : caller.PlayerName;
float.TryParse(command.GetArg(2), out var gravity);
var targets = GetTarget(command); var targets = GetTarget(command);
if (targets == null) return; if (targets == null) return;
@@ -353,11 +348,6 @@ public partial class CS2_SimpleAdmin
// Set player's gravity // Set player's gravity
player.SetGravity(gravity); player.SetGravity(gravity);
if (gravity == 1f)
GravityPlayers.Remove(player);
else
GravityPlayers[player] = gravity;
// Log the command // Log the command
if (command == null) if (command == null)
Helper.LogCommand(caller, $"css_gravity {(string.IsNullOrEmpty(player.PlayerName) ? player.SteamID.ToString() : player.PlayerName)} {gravity}"); Helper.LogCommand(caller, $"css_gravity {(string.IsNullOrEmpty(player.PlayerName) ? player.SteamID.ToString() : player.PlayerName)} {gravity}");

View File

@@ -221,9 +221,6 @@ public class OtherSettings
[JsonPropertyName("ShowBanMenuIfNoTime")] [JsonPropertyName("ShowBanMenuIfNoTime")]
public bool ShowBanMenuIfNoTime { get; set; } = true; public bool ShowBanMenuIfNoTime { get; set; } = true;
[JsonPropertyName("UserMessageGagChatType")]
public bool UserMessageGagChatType { get; set; } = false;
} }
public class CS2_SimpleAdminConfig : BasePluginConfig public class CS2_SimpleAdminConfig : BasePluginConfig

View File

@@ -10,7 +10,6 @@ using CS2_SimpleAdminApi;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System.Text; using System.Text;
using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.UserMessages;
namespace CS2_SimpleAdmin; namespace CS2_SimpleAdmin;
@@ -18,33 +17,31 @@ public partial class CS2_SimpleAdmin
{ {
private void RegisterEvents() private void RegisterEvents()
{ {
RegisterListener<Listeners.OnMapStart>(OnMapStart);
RegisterListener<Listeners.OnMapStart>(OnMapStart); RegisterListener<Listeners.OnMapStart>(OnMapStart);
RegisterListener<Listeners.OnGameServerSteamAPIActivated>(OnGameServerSteamAPIActivated); RegisterListener<Listeners.OnGameServerSteamAPIActivated>(OnGameServerSteamAPIActivated);
if (Config.OtherSettings.UserMessageGagChatType) AddCommandListener(null, OnCommandSayNew);
HookUserMessage(118, HookUmChat); AddCommandListener("callvote", OnCommandCallVote);
AddCommandListener(null, ComamndListenerHandler);
// AddCommandListener("callvote", OnCommandCallVote);
// AddCommandListener("say", OnCommandSay); // AddCommandListener("say", OnCommandSay);
// AddCommandListener("say_team", OnCommandTeamSay); // AddCommandListener("say_team", OnCommandTeamSay);
} }
// private HookResult OnCommandCallVote(CCSPlayerController? caller, CommandInfo info) private HookResult OnCommandCallVote(CCSPlayerController? caller, CommandInfo info)
// { {
// var voteType = info.GetArg(1).ToLower(); var voteType = info.GetArg(1).ToLower();
//
// if (voteType != "kick") if (voteType != "kick")
// return HookResult.Continue; return HookResult.Continue;
//
// var target = int.TryParse(info.GetArg(2), out var userId) var target = int.TryParse(info.GetArg(2), out var userId)
// ? Utilities.GetPlayerFromUserid(userId) ? Utilities.GetPlayerFromUserid(userId)
// : null; : null;
//
// if (target == null || !target.IsValid || target.Connected != PlayerConnectedState.PlayerConnected) if (target == null || !target.IsValid || target.Connected != PlayerConnectedState.PlayerConnected)
// return HookResult.Continue; return HookResult.Continue;
//
// return !AdminManager.CanPlayerTarget(caller, target) ? HookResult.Stop : HookResult.Continue; return !AdminManager.CanPlayerTarget(caller, target) ? HookResult.Stop : HookResult.Continue;
// } }
private void OnGameServerSteamAPIActivated() private void OnGameServerSteamAPIActivated()
{ {
@@ -91,8 +88,6 @@ public partial class CS2_SimpleAdmin
SilentPlayers.Remove(player.Slot); SilentPlayers.Remove(player.Slot);
GodPlayers.Remove(player.Slot); GodPlayers.Remove(player.Slot);
SpeedPlayers.Remove(player.Slot);
GravityPlayers.Remove(player);
if (player.UserId.HasValue) if (player.UserId.HasValue)
PlayersInfo.Remove(player.UserId.Value); PlayersInfo.Remove(player.UserId.Value);
@@ -128,16 +123,13 @@ public partial class CS2_SimpleAdmin
} }
[GameEventHandler] [GameEventHandler]
public HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info) public HookResult OnRoundEnd(EventRoundStart @event, GameEventInfo info)
{ {
#if DEBUG #if DEBUG
Logger.LogCritical("[OnRoundEnd]"); Logger.LogCritical("[OnRoundEnd]");
#endif #endif
GodPlayers.Clear(); GodPlayers.Clear();
SpeedPlayers.Clear();
GravityPlayers.Clear();
foreach (var player in PlayersInfo.Values) foreach (var player in PlayersInfo.Values)
{ {
player.DiePosition = null; player.DiePosition = null;
@@ -162,57 +154,22 @@ public partial class CS2_SimpleAdmin
return HookResult.Continue; return HookResult.Continue;
} }
private HookResult HookUmChat(UserMessage um) private HookResult OnCommandSayNew(CCSPlayerController? player, CommandInfo info)
{
var author = Utilities.GetPlayerFromIndex(um.ReadInt("entityindex"));
if (author == null || !author.IsValid || author.IsBot)
return HookResult.Continue;
if (PlayerPenaltyManager.IsPenalized(author.Slot, PenaltyType.Gag) || PlayerPenaltyManager.IsPenalized(author.Slot, PenaltyType.Silence))
return HookResult.Stop;
// um.Recipients.Clear();
return HookResult.Continue;
}
private HookResult ComamndListenerHandler(CCSPlayerController? player, CommandInfo info)
{ {
if (player == null || !player.IsValid || player.IsBot) if (player == null || !player.IsValid || player.IsBot)
return HookResult.Continue; return HookResult.Continue;
var command = info.GetArg(0).ToLower(); var command = info.GetArg(0).ToLower();
switch (command) if (command == "css_admins_reload")
{ {
case "css_admins_reload": AddTimer(1.0f, () => ReloadAdmins(null));
AddTimer(1.0f, () => ReloadAdmins(null)); return HookResult.Continue;
return HookResult.Continue;
case "callvote":
{
var voteType = info.GetArg(1).ToLower();
if (voteType != "kick")
return HookResult.Continue;
var target = int.TryParse(info.GetArg(2), out var userId)
? Utilities.GetPlayerFromUserid(userId)
: null;
if (target == null || !target.IsValid || target.Connected != PlayerConnectedState.PlayerConnected)
return HookResult.Continue;
return !AdminManager.CanPlayerTarget(player, target) ? HookResult.Stop : HookResult.Continue;
}
} }
if (!command.Contains("say")) if (!command.Contains("say"))
return HookResult.Continue; return HookResult.Continue;
if (!Config.OtherSettings.UserMessageGagChatType)
if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) || PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
return HookResult.Stop;
if (info.GetArg(1).StartsWith($"/") if (info.GetArg(1).StartsWith($"/")
|| info.GetArg(1).StartsWith($"!")) || info.GetArg(1).StartsWith($"!"))
return HookResult.Continue; return HookResult.Continue;
@@ -220,6 +177,9 @@ public partial class CS2_SimpleAdmin
if (info.GetArg(1).Length == 0) if (info.GetArg(1).Length == 0)
return HookResult.Stop; return HookResult.Stop;
if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) || PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
return HookResult.Stop;
if (command == "say" && info.GetArg(1).StartsWith($"@") && if (command == "say" && info.GetArg(1).StartsWith($"@") &&
AdminManager.PlayerHasPermissions(player, "@vip/chat")) AdminManager.PlayerHasPermissions(player, "@vip/chat"))
{ {
@@ -326,8 +286,6 @@ public partial class CS2_SimpleAdmin
GodPlayers.Clear(); GodPlayers.Clear();
SilentPlayers.Clear(); SilentPlayers.Clear();
SpeedPlayers.Clear();
GravityPlayers.Clear();
PlayerPenaltyManager.RemoveAllPenalties(); PlayerPenaltyManager.RemoveAllPenalties();
} }
@@ -340,9 +298,6 @@ public partial class CS2_SimpleAdmin
if (player is null || @event.Attacker is null || !player.PawnIsAlive || player.PlayerPawn.Value == null) if (player is null || @event.Attacker is null || !player.PawnIsAlive || player.PlayerPawn.Value == null)
return HookResult.Continue; return HookResult.Continue;
if (SpeedPlayers.TryGetValue(player.Slot, out var speedPlayer))
player.SetSpeed(speedPlayer);
if (!GodPlayers.Contains(player.Slot)) return HookResult.Continue; if (!GodPlayers.Contains(player.Slot)) return HookResult.Continue;
player.PlayerPawn.Value.Health = player.PlayerPawn.Value.MaxHealth; player.PlayerPawn.Value.Health = player.PlayerPawn.Value.MaxHealth;
@@ -359,9 +314,6 @@ public partial class CS2_SimpleAdmin
if (player?.UserId == null || player.IsBot || player.Connected != PlayerConnectedState.PlayerConnected) if (player?.UserId == null || player.IsBot || player.Connected != PlayerConnectedState.PlayerConnected)
return HookResult.Continue; return HookResult.Continue;
SpeedPlayers.Remove(player.Slot);
GravityPlayers.Remove(player);
PlayersInfo[player.UserId.Value].DiePosition = PlayersInfo[player.UserId.Value].DiePosition =
new DiePosition( new DiePosition(
new Vector(player.PlayerPawn.Value?.AbsOrigin?.X, player.PlayerPawn.Value?.AbsOrigin?.Y, new Vector(player.PlayerPawn.Value?.AbsOrigin?.X, player.PlayerPawn.Value?.AbsOrigin?.Y,

View File

@@ -6,7 +6,6 @@ using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Memory; using CounterStrikeSharp.API.Modules.Memory;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using System.Text; using System.Text;
using CounterStrikeSharp.API.Modules.UserMessages;
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector; using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
namespace CS2_SimpleAdmin; namespace CS2_SimpleAdmin;
@@ -94,8 +93,8 @@ public static class PlayerExtensions
public static void Freeze(this CBasePlayerPawn pawn) public static void Freeze(this CBasePlayerPawn pawn)
{ {
pawn.MoveType = MoveType_t.MOVETYPE_INVALID; pawn.MoveType = MoveType_t.MOVETYPE_OBSOLETE;
Schema.SetSchemaValue(pawn.Handle, "CBaseEntity", "m_nActualMoveType", 11); // invalid Schema.SetSchemaValue(pawn.Handle, "CBaseEntity", "m_nActualMoveType", 1); // obsolete
Utilities.SetStateChanged(pawn, "CBaseEntity", "m_MoveType"); Utilities.SetStateChanged(pawn, "CBaseEntity", "m_MoveType");
} }
@@ -172,8 +171,6 @@ public static class PlayerExtensions
if (pawn.LifeState != (int)LifeState_t.LIFE_ALIVE) if (pawn.LifeState != (int)LifeState_t.LIFE_ALIVE)
return; return;
var controller = pawn.Controller.Value?.As<CCSPlayerController>();
/* Teleport in a random direction - thank you, Mani!*/ /* Teleport in a random direction - thank you, Mani!*/
/* Thank you AM & al!*/ /* Thank you AM & al!*/
var random = new Random(); var random = new Random();
@@ -187,17 +184,6 @@ public static class PlayerExtensions
pawn.AbsVelocity.Y = vel.Y; pawn.AbsVelocity.Y = vel.Y;
pawn.AbsVelocity.Z = vel.Z; pawn.AbsVelocity.Z = vel.Z;
if (controller != null && controller.IsValid)
{
var shakeMessage = UserMessage.FromPartialName("Shake");
shakeMessage.SetFloat("duration", 1);
shakeMessage.SetFloat("amplitude", 10);
shakeMessage.SetFloat("frequency", 1f);
shakeMessage.SetInt("command", 0);
shakeMessage.Recipients.Add(controller);
shakeMessage.Send();
}
if (damage <= 0) if (damage <= 0)
return; return;

View File

@@ -18,7 +18,6 @@ using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using CounterStrikeSharp.API.Core.Plugin.Host;
using CounterStrikeSharp.API.Modules.Entities.Constants; using CounterStrikeSharp.API.Modules.Entities.Constants;
using CS2_SimpleAdmin.Managers; using CS2_SimpleAdmin.Managers;
using MenuManager; using MenuManager;
@@ -545,18 +544,6 @@ internal static class Helper
return menu; return menu;
} }
internal static IPluginManager? GetPluginManager()
{
// Access the singleton instance of Application
var applicationInstance = Application.Instance;
// Use Reflection to access the private _pluginManager field
var pluginManagerField = typeof(Application).GetField("_pluginManager", BindingFlags.NonPublic | BindingFlags.Instance);
var pluginManager = pluginManagerField?.GetValue(applicationInstance) as IPluginManager;
return pluginManager;
}
} }
public static class PluginInfo public static class PluginInfo
@@ -703,30 +690,11 @@ public static class WeaponHelper
public static List<(string EnumMemberValue, CsItem EnumValue)> GetWeaponsByPartialName(string input) public static List<(string EnumMemberValue, CsItem EnumValue)> GetWeaponsByPartialName(string input)
{ {
// Normalize input for case-insensitive comparison
var normalizedInput = input.ToLowerInvariant();
// Find all matching weapons based on the input
var matchingWeapons = WeaponsEnumCache.Value var matchingWeapons = WeaponsEnumCache.Value
.Where(kvp => kvp.Key.Contains(normalizedInput, StringComparison.InvariantCultureIgnoreCase)) .Where(kvp => kvp.Key.Contains(input))
.Select(kvp => (EnumMemberValue: kvp.Key, EnumValue: kvp.Value)) .Select(kvp => (kvp.Key, kvp.Value))
.ToList(); .ToList();
// Check for an exact match first return matchingWeapons;
var exactMatch = matchingWeapons
.FirstOrDefault(m => m.EnumMemberValue.Equals(input, StringComparison.OrdinalIgnoreCase));
if (exactMatch.EnumMemberValue != null)
{
// Return a list containing only the exact match
return [exactMatch];
}
// If no exact match, get all matches that start with the input
var filteredWeapons = matchingWeapons
.Where(m => m.EnumMemberValue.StartsWith(normalizedInput, StringComparison.InvariantCultureIgnoreCase))
.ToList();
return filteredWeapons; // Return all relevant matches for the partial input
} }
} }

View File

@@ -2,7 +2,6 @@ using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Entities; using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Timers;
using CounterStrikeSharp.API.ValveConstants.Protobuf; using CounterStrikeSharp.API.ValveConstants.Protobuf;
using CS2_SimpleAdminApi; using CS2_SimpleAdminApi;
using Dapper; using Dapper;
@@ -206,20 +205,6 @@ public class PlayerManager
public void CheckPlayersTimer() public void CheckPlayersTimer()
{ {
CS2_SimpleAdmin.Instance.AddTimer(0.1f, () =>
{
if (CS2_SimpleAdmin.GravityPlayers.Count <= 0) return;
foreach (var value in CS2_SimpleAdmin.GravityPlayers)
{
if (value.Key is not
{ IsValid: true, Connected: PlayerConnectedState.PlayerConnected, PawnIsAlive: true })
continue;
value.Key.SetGravity(value.Value);
}
}, TimerFlags.REPEAT);
CS2_SimpleAdmin.Instance.AddTimer(61.0f, () => CS2_SimpleAdmin.Instance.AddTimer(61.0f, () =>
{ {
#if DEBUG #if DEBUG
@@ -229,50 +214,23 @@ public class PlayerManager
return; return;
var players = Helper.GetValidPlayers(); var players = Helper.GetValidPlayers();
var onlinePlayers = new List<(string? IpAddress, ulong SteamID, int? UserId, int Slot)>(); var onlinePlayers = players
// var onlinePlayers = players .Where(player => player.IpAddress != null)
// .Where(player => player.IpAddress != null) .Select(player => (player.IpAddress, player.SteamID, player.UserId, player.Slot))
// .Select(player => (player.IpAddress, player.SteamID, player.UserId, player.Slot)) .ToList();
// .ToList();
foreach (var player in players) Task.Run(async () =>
{ {
if (player.IpAddress != null) await CS2_SimpleAdmin.Instance.MuteManager.ExpireOldMutes();
onlinePlayers.Add((player.IpAddress, player.SteamID, player.UserId, player.Slot)); await CS2_SimpleAdmin.Instance.BanManager.ExpireOldBans();
} await CS2_SimpleAdmin.Instance.WarnManager.ExpireOldWarns();
await CS2_SimpleAdmin.Instance.PermissionManager.DeleteOldAdmins();
try CS2_SimpleAdmin.BannedPlayers.Clear();
{
var expireTasks = new[] if (onlinePlayers.Count > 0)
{ {
CS2_SimpleAdmin.Instance.BanManager.ExpireOldBans(), try
CS2_SimpleAdmin.Instance.MuteManager.ExpireOldMutes(),
CS2_SimpleAdmin.Instance.WarnManager.ExpireOldWarns(),
CS2_SimpleAdmin.Instance.PermissionManager.DeleteOldAdmins()
};
Task.WhenAll(expireTasks).ContinueWith(t =>
{
if (t is not { IsFaulted: true, Exception: not null }) return;
foreach (var ex in t.Exception.InnerExceptions)
{
CS2_SimpleAdmin._logger?.LogError($"Error expiring penalties: {ex.Message}");
}
});
}
catch (Exception ex)
{
CS2_SimpleAdmin._logger?.LogError($"Unexpected error: {ex.Message}");
}
CS2_SimpleAdmin.BannedPlayers.Clear();
if (onlinePlayers.Count > 0)
{
try
{
Task.Run(async () =>
{ {
await CS2_SimpleAdmin.Instance.BanManager.CheckOnlinePlayers(onlinePlayers); await CS2_SimpleAdmin.Instance.BanManager.CheckOnlinePlayers(onlinePlayers);
@@ -280,54 +238,39 @@ public class PlayerManager
{ {
await CS2_SimpleAdmin.Instance.MuteManager.CheckOnlineModeMutes(onlinePlayers); await CS2_SimpleAdmin.Instance.MuteManager.CheckOnlineModeMutes(onlinePlayers);
} }
}).ContinueWith(t => }
catch (Exception)
{ {
if (t is not { IsFaulted: true, Exception: not null }) return; CS2_SimpleAdmin._logger?.LogError("Unable to check bans for online players");
}
}
foreach (var ex in t.Exception.InnerExceptions) await Server.NextFrameAsync(() =>
{
if (onlinePlayers.Count > 0)
{
try
{ {
CS2_SimpleAdmin._logger?.LogError($"Error checking online players: {ex.Message}"); foreach (var player in players.Where(player => PlayerPenaltyManager.IsSlotInPenalties(player.Slot)))
{
if (!PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Mute) && !PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
player.VoiceFlags = VoiceFlags.Normal;
if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence) ||
PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Mute) ||
PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag)) continue;
player.VoiceFlags = VoiceFlags.Normal;
}
PlayerPenaltyManager.RemoveExpiredPenalties();
} }
}); catch (Exception)
}
catch (Exception ex)
{
CS2_SimpleAdmin._logger?.LogError($"Unexpected error: {ex.Message}");
}
}
if (onlinePlayers.Count <= 0) return;
{
try
{
var penalizedSlots = players
.Where(player => PlayerPenaltyManager.IsSlotInPenalties(player.Slot))
.Select(player => new
{ {
Player = player, CS2_SimpleAdmin._logger?.LogError("Unable to remove old penalties");
IsMuted = PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Mute),
IsSilenced = PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence),
IsGagged = PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag)
});
foreach (var entry in penalizedSlots)
{
// If the player is not muted or silenced, set voice flags to normal
if (!entry.IsMuted && !entry.IsSilenced)
{
entry.Player.VoiceFlags = VoiceFlags.Normal;
} }
} }
});
PlayerPenaltyManager.RemoveExpiredPenalties(); });
}
catch (Exception ex)
{
CS2_SimpleAdmin._logger?.LogError($"Unable to remove old penalties: {ex.Message}");
}
}
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT); }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT);
} }
} }

View File

@@ -7,7 +7,7 @@ namespace CS2_SimpleAdmin.Managers;
public class ServerManager public class ServerManager
{ {
private int _getIpTryCount; private int _getIpTryCount = 0;
public void LoadServerData() public void LoadServerData()
{ {

View File

@@ -26,17 +26,11 @@ public static class ManageServerMenu
// permissions // permissions
var hasMap = AdminManager.CommandIsOverriden("css_map") ? AdminManager.PlayerHasPermissions(admin, AdminManager.GetPermissionOverrides("css_map")) : AdminManager.PlayerHasPermissions(admin, "@css/changemap"); var hasMap = AdminManager.CommandIsOverriden("css_map") ? AdminManager.PlayerHasPermissions(admin, AdminManager.GetPermissionOverrides("css_map")) : AdminManager.PlayerHasPermissions(admin, "@css/changemap");
var hasPlugins = AdminManager.CommandIsOverriden("css_pluginsmanager") ? AdminManager.PlayerHasPermissions(admin, AdminManager.GetPermissionOverrides("css_pluginsmanager")) : AdminManager.PlayerHasPermissions(admin, "@css/root");
//bool hasMap = AdminManager.PlayerHasPermissions(admin, "@css/changemap"); //bool hasMap = AdminManager.PlayerHasPermissions(admin, "@css/changemap");
// options added in order // options added in order
if (hasPlugins)
{
options.Add(new ChatMenuOptionData(localizer?["sa_menu_pluginsmanager_title"] ?? "Manage Plugins", () => admin.ExecuteClientCommandFromServer("css_pluginsmanager")));
}
if (hasMap) if (hasMap)
{ {
options.Add(new ChatMenuOptionData(localizer?["sa_changemap"] ?? "Change Map", () => ChangeMapMenu(admin))); options.Add(new ChatMenuOptionData(localizer?["sa_changemap"] ?? "Change Map", () => ChangeMapMenu(admin)));

View File

@@ -1 +1 @@
1.6.7a 1.6.5a

View File

@@ -47,7 +47,6 @@
"sa_menu_players_manage": "إدارة اللاعبين", "sa_menu_players_manage": "إدارة اللاعبين",
"sa_menu_disconnected_title": "اللاعبون الأخيرون", "sa_menu_disconnected_title": "اللاعبون الأخيرون",
"sa_menu_disconnected_action_title": "اختر الإجراء", "sa_menu_disconnected_action_title": "اختر الإجراء",
"sa_menu_pluginsmanager_title": "إدارة الإضافات",
"sa_player": "اللاعب", "sa_player": "اللاعب",
"sa_console": "وحدة التحكم", "sa_console": "وحدة التحكم",
@@ -126,7 +125,5 @@
"sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}", "sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}",
"sa_adminchat_template_admin": "{LIME}(إداري) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_admin": "{LIME}(إداري) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(لاعب) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(لاعب) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_discord_log_command": "**{0}** أصدر الأمر `{1}` على الخادم `HOSTNAME`", "sa_discord_log_command": "**{0}** أصدر الأمر `{1}` على الخادم `HOSTNAME`"
"sa_menu_pluginsmanager_loaded": "{lime}مفعل {default}الإضافة {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}معطل {default}الإضافة {lightred}{0}"
} }

View File

@@ -47,7 +47,6 @@
"sa_menu_players_manage": "Spieler verwalten", "sa_menu_players_manage": "Spieler verwalten",
"sa_menu_disconnected_title": "Letzte Spieler", "sa_menu_disconnected_title": "Letzte Spieler",
"sa_menu_disconnected_action_title": "Aktion auswählen", "sa_menu_disconnected_action_title": "Aktion auswählen",
"sa_menu_pluginsmanager_title": "Plugins verwalten",
"sa_player": "Spieler", "sa_player": "Spieler",
"sa_console": "Konsole", "sa_console": "Konsole",
@@ -126,7 +125,5 @@
"sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}", "sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}",
"sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(SPIELER) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(SPIELER) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_discord_log_command": "**{0}** hat den Befehl `{1}` auf dem Server `HOSTNAME` ausgeführt", "sa_discord_log_command": "**{0}** hat den Befehl `{1}` auf dem Server `HOSTNAME` ausgeführt"
"sa_menu_pluginsmanager_loaded": "{lime}Aktiviert {default}Plugin {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}Deaktiviert {default}Plugin {lightred}{0}"
} }

View File

@@ -47,7 +47,6 @@
"sa_menu_players_manage": "Players Manage", "sa_menu_players_manage": "Players Manage",
"sa_menu_disconnected_title": "Recent players", "sa_menu_disconnected_title": "Recent players",
"sa_menu_disconnected_action_title": "Select action", "sa_menu_disconnected_action_title": "Select action",
"sa_menu_pluginsmanager_title": "Plugins Manage",
"sa_player": "Player", "sa_player": "Player",
"sa_console": "Console", "sa_console": "Console",
@@ -126,7 +125,5 @@
"sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}", "sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}",
"sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(PLAYER) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(PLAYER) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_discord_log_command": "**{0}** issued command `{1}` on server `HOSTNAME`", "sa_discord_log_command": "**{0}** issued command `{1}` on server `HOSTNAME`"
"sa_menu_pluginsmanager_loaded": "{lime}Enabled {default}plugin {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}Disabled {default}plugin {lightred}{0}"
} }

View File

@@ -47,7 +47,6 @@
"sa_menu_players_manage": "Administrar Jugadores", "sa_menu_players_manage": "Administrar Jugadores",
"sa_menu_disconnected_title": "Jugadores recientes", "sa_menu_disconnected_title": "Jugadores recientes",
"sa_menu_disconnected_action_title": "Seleccionar acción", "sa_menu_disconnected_action_title": "Seleccionar acción",
"sa_menu_pluginsmanager_title": "Gestionar plugins",
"sa_player": "Jugador", "sa_player": "Jugador",
"sa_console": "Consola", "sa_console": "Consola",
@@ -126,7 +125,5 @@
"sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}", "sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}",
"sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(JUGADOR) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(JUGADOR) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_discord_log_command": "**{0}** ejecutó el comando `{1}` en el servidor `HOSTNAME`", "sa_discord_log_command": "**{0}** ejecutó el comando `{1}` en el servidor `HOSTNAME`"
"sa_menu_pluginsmanager_loaded": "{lime}Habilitado {default}plugin {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}Deshabilitado {default}plugin {lightred}{0}"
} }

View File

@@ -47,7 +47,6 @@
"sa_menu_players_manage": "مدیریت بازیکنان", "sa_menu_players_manage": "مدیریت بازیکنان",
"sa_menu_disconnected_title": "آخرین بازیکنان", "sa_menu_disconnected_title": "آخرین بازیکنان",
"sa_menu_disconnected_action_title": "انتخاب عملیات", "sa_menu_disconnected_action_title": "انتخاب عملیات",
"sa_menu_pluginsmanager_title": "مدیریت پلاگین‌ها",
"sa_player": "بازیکن", "sa_player": "بازیکن",
"sa_console": "کنسول", "sa_console": "کنسول",
@@ -126,7 +125,5 @@
"sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}", "sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}",
"sa_adminchat_template_admin": "{LIME}(ادمین) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_admin": "{LIME}(ادمین) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(بازیکن) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(بازیکن) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_discord_log_command": "**{0}** فرمان `{1}` را در سرور `HOSTNAME` اجرا کرد", "sa_discord_log_command": "**{0}** فرمان `{1}` را در سرور `HOSTNAME` اجرا کرد"
"sa_menu_pluginsmanager_loaded": "{lime}فعال {default}پلاگین {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}غیرفعال {default}پلاگین {lightred}{0}"
} }

View File

@@ -47,7 +47,6 @@
"sa_menu_players_manage": "Gérer les joueurs", "sa_menu_players_manage": "Gérer les joueurs",
"sa_menu_disconnected_title": "Derniers joueurs", "sa_menu_disconnected_title": "Derniers joueurs",
"sa_menu_disconnected_action_title": "Choisir une action", "sa_menu_disconnected_action_title": "Choisir une action",
"sa_menu_pluginsmanager_title": "Gérer les plugins",
"sa_player": "Joueur", "sa_player": "Joueur",
"sa_console": "Console", "sa_console": "Console",
@@ -126,7 +125,5 @@
"sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}", "sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}",
"sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(JOUEUR) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(JOUEUR) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_discord_log_command": "**{0}** a exécuté la commande `{1}` sur le serveur `HOSTNAME`", "sa_discord_log_command": "**{0}** a exécuté la commande `{1}` sur le serveur `HOSTNAME`"
"sa_menu_pluginsmanager_loaded": "{lime}Activé {default}plugin {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}Désactivé {default}plugin {lightred}{0}"
} }

View File

@@ -47,7 +47,6 @@
"sa_menu_players_manage": "Spēlētāju pārvaldība", "sa_menu_players_manage": "Spēlētāju pārvaldība",
"sa_menu_disconnected_title": "Pēdējie spēlētāji", "sa_menu_disconnected_title": "Pēdējie spēlētāji",
"sa_menu_disconnected_action_title": "Izvēlieties darbību", "sa_menu_disconnected_action_title": "Izvēlieties darbību",
"sa_menu_pluginsmanager_title": "Pārvaldīt spraudņus",
"sa_player": "Spēlētājs", "sa_player": "Spēlētājs",
"sa_console": "Konsole", "sa_console": "Konsole",
@@ -126,7 +125,5 @@
"sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}", "sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}",
"sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(SPĒLĒTĀJS) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(SPĒLĒTĀJS) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_discord_log_command": "**{0}** izpildīja komandu `{1}` serverī `HOSTNAME`", "sa_discord_log_command": "**{0}** izpildīja komandu `{1}` serverī `HOSTNAME`"
"sa_menu_pluginsmanager_loaded": "{lime}Ieslēgts {default}spraudnis {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}Izslēgts {default}spraudnis {lightred}{0}"
} }

View File

@@ -47,7 +47,6 @@
"sa_menu_players_manage": "Zarządzaj graczami", "sa_menu_players_manage": "Zarządzaj graczami",
"sa_menu_disconnected_title": "Ostatni gracze", "sa_menu_disconnected_title": "Ostatni gracze",
"sa_menu_disconnected_action_title": "Wybierz akcje", "sa_menu_disconnected_action_title": "Wybierz akcje",
"sa_menu_pluginsmanager_title": "Zarządzaj pluginami",
"sa_player": "Gracz", "sa_player": "Gracz",
"sa_console": "Konsola", "sa_console": "Konsola",
@@ -126,8 +125,5 @@
"sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}", "sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}",
"sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(GRACZ) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(GRACZ) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_discord_log_command": "**{0}** użył komendy `{1}` na serwerze `HOSTNAME`", "sa_discord_log_command": "**{0}** użył komendy `{1}` na serwerze `HOSTNAME`"
"sa_menu_pluginsmanager_loaded": "{lime}Włączono {default}plugin {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}Wyłączono {default}plugin {lightred}{0}"
} }

View File

@@ -47,7 +47,6 @@
"sa_menu_players_manage": "Gerenciar Jogadores", "sa_menu_players_manage": "Gerenciar Jogadores",
"sa_menu_disconnected_title": "Jogadores recentes", "sa_menu_disconnected_title": "Jogadores recentes",
"sa_menu_disconnected_action_title": "Selecionar ação", "sa_menu_disconnected_action_title": "Selecionar ação",
"sa_menu_pluginsmanager_title": "Gerenciar Plugins",
"sa_player": "Jogador", "sa_player": "Jogador",
"sa_console": "Console", "sa_console": "Console",
@@ -126,7 +125,5 @@
"sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}", "sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}",
"sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(JOGADOR) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(JOGADOR) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_discord_log_command": "**{0}** executou o comando `{1}` no servidor `HOSTNAME`", "sa_discord_log_command": "**{0}** executou o comando `{1}` no servidor `HOSTNAME`"
"sa_menu_pluginsmanager_loaded": "{lime}Ativado {default}plugin {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}Desativado {default}plugin {lightred}{0}"
} }

View File

@@ -47,7 +47,6 @@
"sa_menu_players_manage": "Gerenciar Jogadores", "sa_menu_players_manage": "Gerenciar Jogadores",
"sa_menu_disconnected_title": "Jogadores recentes", "sa_menu_disconnected_title": "Jogadores recentes",
"sa_menu_disconnected_action_title": "Selecionar ação", "sa_menu_disconnected_action_title": "Selecionar ação",
"sa_menu_pluginsmanager_title": "Gerir Plugins",
"sa_player": "Jogador", "sa_player": "Jogador",
"sa_console": "Console", "sa_console": "Console",
@@ -126,7 +125,5 @@
"sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}", "sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}",
"sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(JOGADOR) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(JOGADOR) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_discord_log_command": "**{0}** executou o comando `{1}` no servidor `HOSTNAME`", "sa_discord_log_command": "**{0}** executou o comando `{1}` no servidor `HOSTNAME`"
"sa_menu_pluginsmanager_loaded": "{lime}Ativado {default}plugin {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}Desativado {default}plugin {lightred}{0}"
} }

View File

@@ -47,7 +47,6 @@
"sa_menu_players_manage": "Управление игроками", "sa_menu_players_manage": "Управление игроками",
"sa_menu_disconnected_title": "Последние игроки", "sa_menu_disconnected_title": "Последние игроки",
"sa_menu_disconnected_action_title": "Выберите действие", "sa_menu_disconnected_action_title": "Выберите действие",
"sa_menu_pluginsmanager_title": "Управление плагинами",
"sa_player": "Игрок", "sa_player": "Игрок",
"sa_console": "Консоль", "sa_console": "Консоль",
@@ -126,7 +125,5 @@
"sa_vipchat_template": "{LIME}(ВИП ЧАТ) {0}{default}: {1}", "sa_vipchat_template": "{LIME}(ВИП ЧАТ) {0}{default}: {1}",
"sa_adminchat_template_admin": "{LIME}(АДМИН) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_admin": "{LIME}(АДМИН) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(ИГРОК) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(ИГРОК) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_discord_log_command": "**{0}** выполнил команду `{1}` на сервере `HOSTNAME`", "sa_discord_log_command": "**{0}** выполнил команду `{1}` на сервере `HOSTNAME`"
"sa_menu_pluginsmanager_loaded": "{lime}Включен {default}плагин {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}Выключен {default}плагин {lightred}{0}"
} }

View File

@@ -47,7 +47,6 @@
"sa_menu_players_manage": "Oyuncu Yönetimi", "sa_menu_players_manage": "Oyuncu Yönetimi",
"sa_menu_disconnected_title": "Son oyuncular", "sa_menu_disconnected_title": "Son oyuncular",
"sa_menu_disconnected_action_title": "Eylem seçin", "sa_menu_disconnected_action_title": "Eylem seçin",
"sa_menu_pluginsmanager_title": "Eklentileri Yönet",
"sa_player": "Oyuncu", "sa_player": "Oyuncu",
"sa_console": "Konsol", "sa_console": "Konsol",
@@ -126,7 +125,5 @@
"sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}", "sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}",
"sa_adminchat_template_admin": "{LIME}(Yönetici) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_admin": "{LIME}(Yönetici) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(Oyuncu) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(Oyuncu) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_discord_log_command": "**{0}** `{1}` komutunu `HOSTNAME` sunucusunda gerçekleştirdi", "sa_discord_log_command": "**{0}** `{1}` komutunu `HOSTNAME` sunucusunda gerçekleştirdi"
"sa_menu_pluginsmanager_loaded": "{lime}Etkinleştirildi {default}eklenti {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}Devre Dışı Bırakıldı {default}eklenti {lightred}{0}"
} }

View File

@@ -47,7 +47,6 @@
"sa_menu_players_manage": "玩家管理", "sa_menu_players_manage": "玩家管理",
"sa_menu_disconnected_title": "最近的玩家", "sa_menu_disconnected_title": "最近的玩家",
"sa_menu_disconnected_action_title": "选择操作", "sa_menu_disconnected_action_title": "选择操作",
"sa_menu_pluginsmanager_title": "管理插件",
"sa_player": "玩家", "sa_player": "玩家",
"sa_console": "控制台", "sa_console": "控制台",
@@ -126,7 +125,5 @@
"sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}", "sa_vipchat_template": "{LIME}(VIP CHAT) {0}{default}: {1}",
"sa_adminchat_template_admin": "{LIME}(管理员) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_admin": "{LIME}(管理员) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(玩家) {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_discord_log_command": "**{0}** 在服务器 `HOSTNAME` 上发出了 `{1}` 命令"
"sa_menu_pluginsmanager_loaded": "{lime}已启用 {default}插件 {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}已禁用 {default}插件 {lightred}{0}"
} }

View File

@@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.284" /> <PackageReference Include="CounterStrikeSharp.API" Version="1.0.276" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -28,7 +28,7 @@ public class PlayerInfo(
public DiePosition? DiePosition { get; set; } public DiePosition? DiePosition { get; set; }
} }
public struct DiePosition(Vector? position = null, QAngle? angle = null) public class DiePosition(Vector? position = null, QAngle? angle = null)
{ {
public Vector? Position { get; set; } = position; public Vector? Position { get; set; } = position;
public QAngle? Angle { get; set; } = angle; public QAngle? Angle { get; set; } = angle;