diff --git a/Modules/CS2-SimpleAdmin_ExampleModule/CS2-SimpleAdminApi.dll b/Modules/CS2-SimpleAdmin_ExampleModule/CS2-SimpleAdminApi.dll new file mode 100644 index 0000000..c2dbdee Binary files /dev/null and b/Modules/CS2-SimpleAdmin_ExampleModule/CS2-SimpleAdminApi.dll differ diff --git a/Modules/CS2-SimpleAdmin_ExampleModule/CS2-SimpleAdmin_ExampleModule.cs b/Modules/CS2-SimpleAdmin_ExampleModule/CS2-SimpleAdmin_ExampleModule.cs new file mode 100644 index 0000000..dc34a35 --- /dev/null +++ b/Modules/CS2-SimpleAdmin_ExampleModule/CS2-SimpleAdmin_ExampleModule.cs @@ -0,0 +1,165 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Core.Attributes.Registration; +using CounterStrikeSharp.API.Core.Capabilities; +using CounterStrikeSharp.API.Modules.Commands; +using CounterStrikeSharp.API.Modules.Entities; +using CS2_SimpleAdminApi; +using Microsoft.Extensions.Logging; + +namespace CS2_SimpleAdmin_ExampleModule; + +public class CS2_SimpleAdmin_ExampleModule: BasePlugin +{ + public override string ModuleName => "[CS2-SimpleAdmin] Example module"; + public override string ModuleVersion => "v1.0.0"; + public override string ModuleAuthor => "daffyy"; + + private int? _serverId; + private string _dbConnectionString = string.Empty; + + private static ICS2_SimpleAdminApi? _sharedApi; + private readonly PluginCapability _pluginCapability = new("simpleadmin:api"); + + public override void OnAllPluginsLoaded(bool hotReload) + { + _sharedApi = _pluginCapability.Get(); + + if (_sharedApi == null) + { + Logger.LogError("CS2-SimpleAdmin SharedApi not found"); + Unload(false); + return; + } + + _serverId = _sharedApi.GetServerId(); + _dbConnectionString = _sharedApi.GetConnectionString(); + Logger.LogInformation($"{ModuleName} started with serverId {_serverId}"); + + _sharedApi.OnPlayerPenaltied += OnPlayerPenaltied; + _sharedApi.OnPlayerPenaltiedAdded += OnPlayerPenaltiedAdded; + } + + [ConsoleCommand("css_kickme")] + [CommandHelper(whoCanExecute: CommandUsage.CLIENT_ONLY)] + public void KickMeCommand(CCSPlayerController? caller, CommandInfo commandInfo) + { + if (caller == null) return; + + _sharedApi?.IssuePenalty(caller, null, PenaltyType.Kick, "test"); + } + + [ConsoleCommand("css_serverAddress")] + [CommandHelper(whoCanExecute: CommandUsage.CLIENT_ONLY)] + public void ServerAddressCommand(CCSPlayerController? caller, CommandInfo commandInfo) + { + commandInfo.ReplyToCommand($"Our server IP: {_sharedApi?.GetServerAddress()}"); + } + + [ConsoleCommand("css_getMyInfo")] + [CommandHelper(whoCanExecute: CommandUsage.CLIENT_ONLY)] + public void GetMyInfoCommand(CCSPlayerController? caller, CommandInfo commandInfo) + { + if (caller == null) return; + + var playerInfo = _sharedApi?.GetPlayerInfo(caller); + commandInfo.ReplyToCommand($"Your total bans: {playerInfo?.TotalBans}"); + commandInfo.ReplyToCommand($"Your total gags: {playerInfo?.TotalGags}"); + commandInfo.ReplyToCommand($"Your total mutes: {playerInfo?.TotalMutes}"); + commandInfo.ReplyToCommand($"Your total silences: {playerInfo?.SteamId}"); + } + + private void OnPlayerPenaltied(PlayerInfo player, PlayerInfo? admin, PenaltyType penaltyType, + string reason, int duration, int? serverId) + { + if (penaltyType == PenaltyType.Ban) + { + Server.PrintToChatAll($"{player.Name} is a dog"); + } + + switch (penaltyType) + { + case PenaltyType.Ban: + { + Logger.LogInformation("Ban issued"); + break; + } + case PenaltyType.Kick: + { + Logger.LogInformation("Kick issued"); + break; + } + case PenaltyType.Gag: + { + Logger.LogInformation("Gag issued"); + break; + } + case PenaltyType.Mute: + { + Logger.LogInformation("Mute issued"); + break; + } + case PenaltyType.Silence: + { + Logger.LogInformation("Silence issued"); + break; + } + case PenaltyType.Warn: + { + Logger.LogInformation("Warn issued"); + break; + } + default: + throw new ArgumentOutOfRangeException(nameof(penaltyType), penaltyType, null); + } + + Console.WriteLine(player.Name); + Console.WriteLine(admin?.Name ?? "Console"); + Console.WriteLine(player.SteamId.ToString()); + Console.WriteLine(reason); + } + + private void OnPlayerPenaltiedAdded(SteamID steamId, PlayerInfo? admin, PenaltyType penaltyType, + string reason, int duration, int? serverId) + { + switch (penaltyType) + { + case PenaltyType.Ban: + { + Logger.LogInformation("Ban added"); + break; + } + case PenaltyType.Kick: + { + Logger.LogInformation("Kick added"); + break; + } + case PenaltyType.Gag: + { + Logger.LogInformation("Gag added"); + break; + } + case PenaltyType.Mute: + { + Logger.LogInformation("Mute added"); + break; + } + case PenaltyType.Silence: + { + Logger.LogInformation("Silence added"); + break; + } + case PenaltyType.Warn: + { + Logger.LogInformation("Warn added"); + break; + } + default: + throw new ArgumentOutOfRangeException(nameof(penaltyType), penaltyType, null); + } + + Console.WriteLine(admin?.Name ?? "Console"); + Console.WriteLine(steamId.ToString()); + Console.WriteLine(reason); + } +} \ No newline at end of file diff --git a/Modules/CS2-SimpleAdmin_ExampleModule/CS2-SimpleAdmin_ExampleModule.csproj b/Modules/CS2-SimpleAdmin_ExampleModule/CS2-SimpleAdmin_ExampleModule.csproj new file mode 100644 index 0000000..e3f9fc3 --- /dev/null +++ b/Modules/CS2-SimpleAdmin_ExampleModule/CS2-SimpleAdmin_ExampleModule.csproj @@ -0,0 +1,20 @@ + + + + net8.0 + CS2_SimpleAdmin_ExampleModule + enable + enable + + + + + + + + + CS2-SimpleAdminApi.dll + + + + diff --git a/Modules/CS2-SimpleAdmin_ExampleModule/CS2-SimpleAdmin_ExampleModule.sln b/Modules/CS2-SimpleAdmin_ExampleModule/CS2-SimpleAdmin_ExampleModule.sln new file mode 100644 index 0000000..34bbc15 --- /dev/null +++ b/Modules/CS2-SimpleAdmin_ExampleModule/CS2-SimpleAdmin_ExampleModule.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CS2-SimpleAdmin_ExampleModule", "CS2-SimpleAdmin_ExampleModule.csproj", "{D940F3E9-0E3F-467A-B336-149E3A624FB6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D940F3E9-0E3F-467A-B336-149E3A624FB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D940F3E9-0E3F-467A-B336-149E3A624FB6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D940F3E9-0E3F-467A-B336-149E3A624FB6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D940F3E9-0E3F-467A-B336-149E3A624FB6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal