```diff
+ Added PluginsManager
```
This commit is contained in:
Dawid Bepierszcz
2024-10-31 03:45:22 +01:00
parent 7a69c5387a
commit c42d2ddeeb
18 changed files with 146 additions and 17 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 ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
public override string ModuleAuthor => "daffyy & Dliix66";
public override string ModuleVersion => "1.6.6a";
public override string ModuleVersion => "1.6.7a";
public override void Load(bool hotReload)
{

View File

@@ -77,7 +77,8 @@ public static class RegisterCommands
new CommandMapping("css_prename", CS2_SimpleAdmin.Instance.OnPrenameCommand),
new CommandMapping("css_respawn", CS2_SimpleAdmin.Instance.OnRespawnCommand),
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()
@@ -158,7 +159,8 @@ public static class RegisterCommands
{ "css_prename", new Command { Aliases = ["css_prename"] } },
{ "css_respawn", new Command { Aliases = ["css_respawn"] } },
{ "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,3 +1,4 @@
using System.Collections;
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Translations;
@@ -13,6 +14,9 @@ using CS2_SimpleAdminApi;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Globalization;
using System.Reflection;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using MenuManager;
namespace CS2_SimpleAdmin;
@@ -890,6 +894,76 @@ public partial class CS2_SimpleAdmin
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)
{
Helper.LogCommand(admin, "css_restartgame");

View File

@@ -18,6 +18,7 @@ using System.Runtime.Serialization;
using System.Text;
using System.Text.Json;
using System.Text.RegularExpressions;
using CounterStrikeSharp.API.Core.Plugin.Host;
using CounterStrikeSharp.API.Modules.Entities.Constants;
using CS2_SimpleAdmin.Managers;
using MenuManager;
@@ -544,6 +545,18 @@ internal static class Helper
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

View File

@@ -1 +1 @@
1.6.6a
1.6.7a

View File

@@ -47,6 +47,7 @@
"sa_menu_players_manage": "إدارة اللاعبين",
"sa_menu_disconnected_title": "اللاعبون الأخيرون",
"sa_menu_disconnected_action_title": "اختر الإجراء",
"sa_menu_pluginsmanager_title": "إدارة الإضافات",
"sa_player": "اللاعب",
"sa_console": "وحدة التحكم",
@@ -124,5 +125,7 @@
"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}** أصدر الأمر `{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,6 +47,7 @@
"sa_menu_players_manage": "Spieler verwalten",
"sa_menu_disconnected_title": "Letzte Spieler",
"sa_menu_disconnected_action_title": "Aktion auswählen",
"sa_menu_pluginsmanager_title": "Plugins verwalten",
"sa_player": "Spieler",
"sa_console": "Konsole",
@@ -124,5 +125,7 @@
"sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{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_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,6 +47,7 @@
"sa_menu_players_manage": "Players Manage",
"sa_menu_disconnected_title": "Recent players",
"sa_menu_disconnected_action_title": "Select action",
"sa_menu_pluginsmanager_title": "Plugins Manage",
"sa_player": "Player",
"sa_console": "Console",
@@ -124,5 +125,7 @@
"sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{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_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,6 +47,7 @@
"sa_menu_players_manage": "Administrar Jugadores",
"sa_menu_disconnected_title": "Jugadores recientes",
"sa_menu_disconnected_action_title": "Seleccionar acción",
"sa_menu_pluginsmanager_title": "Gestionar plugins",
"sa_player": "Jugador",
"sa_console": "Consola",
@@ -124,5 +125,7 @@
"sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{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_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,6 +47,7 @@
"sa_menu_players_manage": "مدیریت بازیکنان",
"sa_menu_disconnected_title": "آخرین بازیکنان",
"sa_menu_disconnected_action_title": "انتخاب عملیات",
"sa_menu_pluginsmanager_title": "مدیریت پلاگین‌ها",
"sa_player": "بازیکن",
"sa_console": "کنسول",
@@ -124,5 +125,7 @@
"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}** فرمان `{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,6 +47,7 @@
"sa_menu_players_manage": "Gérer les joueurs",
"sa_menu_disconnected_title": "Derniers joueurs",
"sa_menu_disconnected_action_title": "Choisir une action",
"sa_menu_pluginsmanager_title": "Gérer les plugins",
"sa_player": "Joueur",
"sa_console": "Console",
@@ -124,5 +125,7 @@
"sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{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_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,6 +47,7 @@
"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_action_title": "Izvēlieties darbību",
"sa_menu_pluginsmanager_title": "Pārvaldīt spraudņus",
"sa_player": "Spēlētājs",
"sa_console": "Konsole",
@@ -124,5 +125,7 @@
"sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{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_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,6 +47,7 @@
"sa_menu_players_manage": "Zarządzaj graczami",
"sa_menu_disconnected_title": "Ostatni gracze",
"sa_menu_disconnected_action_title": "Wybierz akcje",
"sa_menu_pluginsmanager_title": "Zarządzaj pluginami",
"sa_player": "Gracz",
"sa_console": "Konsola",
@@ -124,5 +125,8 @@
"sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{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_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,6 +47,7 @@
"sa_menu_players_manage": "Gerenciar Jogadores",
"sa_menu_disconnected_title": "Jogadores recentes",
"sa_menu_disconnected_action_title": "Selecionar ação",
"sa_menu_pluginsmanager_title": "Gerenciar Plugins",
"sa_player": "Jogador",
"sa_console": "Console",
@@ -124,5 +125,7 @@
"sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{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_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,6 +47,7 @@
"sa_menu_players_manage": "Gerenciar Jogadores",
"sa_menu_disconnected_title": "Jogadores recentes",
"sa_menu_disconnected_action_title": "Selecionar ação",
"sa_menu_pluginsmanager_title": "Gerir Plugins",
"sa_player": "Jogador",
"sa_console": "Console",
@@ -124,5 +125,7 @@
"sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{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_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,6 +47,7 @@
"sa_menu_players_manage": "Управление игроками",
"sa_menu_disconnected_title": "Последние игроки",
"sa_menu_disconnected_action_title": "Выберите действие",
"sa_menu_pluginsmanager_title": "Управление плагинами",
"sa_player": "Игрок",
"sa_console": "Консоль",
@@ -124,5 +125,7 @@
"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}** выполнил команду `{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,6 +47,7 @@
"sa_menu_players_manage": "Oyuncu Yönetimi",
"sa_menu_disconnected_title": "Son oyuncular",
"sa_menu_disconnected_action_title": "Eylem seçin",
"sa_menu_pluginsmanager_title": "Eklentileri Yönet",
"sa_player": "Oyuncu",
"sa_console": "Konsol",
@@ -124,5 +125,7 @@
"sa_adminsay_prefix": "{RED}Yönetici: {lightred}{0}{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_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,6 +47,7 @@
"sa_menu_players_manage": "玩家管理",
"sa_menu_disconnected_title": "最近的玩家",
"sa_menu_disconnected_action_title": "选择操作",
"sa_menu_pluginsmanager_title": "管理插件",
"sa_player": "玩家",
"sa_console": "控制台",
@@ -124,5 +125,7 @@
"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_discord_log_command": "**{0}** 在服务器 `HOSTNAME` 上发出了 `{1}` 命令",
"sa_menu_pluginsmanager_loaded": "{lime}已启用 {default}插件 {lime}{0}",
"sa_menu_pluginsmanager_unloaded": "{lightred}已禁用 {default}插件 {lightred}{0}"
}