From 581c888a8fb2c9ef7dd0720ffbd9cdbb5ffc0335 Mon Sep 17 00:00:00 2001 From: Nikedemos Date: Thu, 3 Nov 2022 03:45:28 +0000 Subject: [PATCH 1/2] Converted separate chat/console commands into 1 covalence one Covalence commands have many advantages over regular commands: first and foremost, they can be registered under different aliases easily without using methods for redirects. Second, they can be registered with a set of permissions required, so there's no need to check for that permission later in the code of the method. Third, and this is the biggest bonus, they're completely agnostic when it comes to distinction between console and chat - same exact logic can be used. --- InventoryCleaner/InventoryCleaner.cs | 126 +++++++++------------------ 1 file changed, 42 insertions(+), 84 deletions(-) diff --git a/InventoryCleaner/InventoryCleaner.cs b/InventoryCleaner/InventoryCleaner.cs index 451e444..5011b63 100644 --- a/InventoryCleaner/InventoryCleaner.cs +++ b/InventoryCleaner/InventoryCleaner.cs @@ -21,7 +21,7 @@ namespace Oxide.Plugins { - [Info("Inventory Cleaner", "Joao Pster", "2.1.0")] + [Info("Inventory Cleaner", "Joao Pster", "2.1.1")] [Description("Allows players to clear their own or another player's inventory.")] public class InventoryCleaner : RustPlugin { @@ -187,7 +187,12 @@ private void LoadPermissions() private void Init() { - LoadPermissions(); + LoadPermissions(); + + // Register chat/console command under many different aliases + // When running from chat, prefix with a forward slash / + + AddCovalenceCommand(new string[] {"clearinv", "cleaninv", "clear.inv", "clean.inv", "inv.clear", "invclear", "inv.clean", "invclean"}, nameof(ClearCovalenceCommand), MyPermissions.Clear); } #endregion @@ -324,84 +329,38 @@ private void ClearAllContainers(BasePlayer player, string msgKey, Action 1) && (args[1].ToLower() == "everyone")); - - var opt = args[0].ToLower(); - - switch (opt) - { - case "main": - ClearAllContainers(player, MessageKey.AllCleaned, SendChatMessage, opt, every); - break; - case "inv": - ClearOneContainer(player, player.inventory.containerMain, MessageKey.InvCleaned, SendChatMessage, opt, every); - break; - case "belt": - ClearOneContainer(player, player.inventory.containerBelt, MessageKey.InvCleaned, SendChatMessage, opt, every); - break; - case "wear": - ClearOneContainer(player, player.inventory.containerWear, MessageKey.InvCleaned, SendChatMessage, opt, every); - break; - case "help": - HelpPanel(player, SendChatMessage); - break; - case "cmds": - CommandsPanel(player, SendChatMessage); - break; - default: - SendChatMessage(player, GenerateMessage(GetMessage(MessageKey.OptNotFound, player.UserIDString, opt))); - break; - } - } - - #endregion - - #region Console Commands - - [ConsoleCommand("inv.clear")] - private void CmdConsole(ConsoleSystem.Arg arg) - { - var player = arg.Player(); - - // Check Permission - var has = HasPermission(player, MyPermissions.Clear); - if (!has) return; - - // Default Case - if (arg.Args == null) - { - ClearAllContainers(player, MessageKey.AllCleaned, SendConsoleMessage); - return; - } - - var args = arg.Args; - - // Check if every is true and get the option - var every = ((args.Length > 1) && (args[1].ToLower() == "everyone")); - - var opt = args[0].ToLower(); - + } + + #endregion + + #region Chat and/or Console Commands + private void ClearCovalenceCommand(IPlayer iplayer, string command, string[] args) + { + // This is a client-oriented command, so no need to go further if ran from console + if (iplayer.IsServer) + { + return; + } + + // Get BasePlayer from IPlayer + var player = iplayer.Object as BasePlayer; + + if (!HasPermission(player, MyPermissions.Clear)) + { + return; + } + + if (args.Length == 0) + { + // Default Case + ClearAllContainers(player, MessageKey.AllCleaned, SendConsoleMessage); + return; + } + + var every = ((args.Length > 1) && (args[1].ToLower() == "everyone")); + + var opt = args[0].ToLower(); + switch (opt) { case "main": @@ -425,9 +384,8 @@ private void CmdConsole(ConsoleSystem.Arg arg) default: SendChatMessage(player, GenerateMessage(GetMessage(MessageKey.OptNotFound, player.UserIDString, opt))); break; - } - } - + } + } #endregion #region Localization @@ -513,4 +471,4 @@ private string GetMessage(string messageKey, string playerId = null, params obje #endregion } -} \ No newline at end of file +} From 93e68a6227ea4c417ae88cb158a91c263079ccde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?JO=C3=83O=20PSTER?= Date: Mon, 7 Nov 2022 21:29:28 -0300 Subject: [PATCH 2/2] added player reply --- InventoryCleaner/InventoryCleaner.cs | 188 +++++++++--------- .../net6.0/InventoryCleaner.AssemblyInfo.cs | 7 +- ....GeneratedMSBuildEditorConfig.editorconfig | 2 +- .../net6.0/InventoryCleaner.assets.cache | Bin 140 -> 140 bytes .../InventoryCleaner.csproj.nuget.dgspec.json | 10 +- InventoryCleaner/obj/project.assets.json | 6 +- InventoryCleaner/obj/project.nuget.cache | 4 +- InventoryCleaner/obj/project.packagespec.json | 2 +- .../obj/rider.project.restore.info | 1 + 9 files changed, 113 insertions(+), 107 deletions(-) create mode 100644 InventoryCleaner/obj/rider.project.restore.info diff --git a/InventoryCleaner/InventoryCleaner.cs b/InventoryCleaner/InventoryCleaner.cs index 5011b63..3965fb4 100644 --- a/InventoryCleaner/InventoryCleaner.cs +++ b/InventoryCleaner/InventoryCleaner.cs @@ -128,18 +128,23 @@ private void SendChatMessage(BasePlayer player, string message) Player.Message(player, message, _config.MessageImage); } + private void ReplyPlayer(IPlayer player, string message) + { + player.Reply(message); + } + private void SendMessageToAll(string message) { Server.Broadcast(message, _config.MessageImage); } - private bool[] hasAllPermissions(BasePlayer player) + private bool[] hasAllPermissions(IPlayer iplayer) { List bools = new List(); foreach (var perm in _permissions) { - bools.Add(player.IPlayer.HasPermission(perm)); + bools.Add(iplayer.HasPermission(perm)); } return bools.ToArray(); @@ -187,11 +192,11 @@ private void LoadPermissions() private void Init() { - LoadPermissions(); - - // Register chat/console command under many different aliases - // When running from chat, prefix with a forward slash / - + LoadPermissions(); + + // Register chat/console command under many different aliases + // When running from chat, prefix with a forward slash / + AddCovalenceCommand(new string[] {"clearinv", "cleaninv", "clear.inv", "clean.inv", "inv.clear", "invclear", "inv.clean", "invclean"}, nameof(ClearCovalenceCommand), MyPermissions.Clear); } @@ -222,47 +227,47 @@ void OnPlayerDisconnected(BasePlayer player, string reason) #region Panel Functions - private void CommandsPanel(BasePlayer player, Action messager, params string[] args) + private void CommandsPanel(IPlayer iplayer, params string[] args) { var sb = new StringBuilder(); - sb.Append(GetMessage(MessageKey.Header, player.UserIDString, Author, Version)); - sb.Append(GetMessage(MessageKey.Gone, player.UserIDString)); - sb.Append(GetMessage(MessageKey.Opts, player.UserIDString)); - sb.Append(GetMessage(MessageKey.OptAll, player.UserIDString)); - sb.Append(GetMessage(MessageKey.OptInv, player.UserIDString)); - sb.Append(GetMessage(MessageKey.OptBelt, player.UserIDString)); - sb.Append(GetMessage(MessageKey.OptWear, player.UserIDString)); - sb.Append(GetMessage(MessageKey.OptEvery, player.UserIDString)); - - messager(player, sb.ToString()); + sb.Append(GetMessage(MessageKey.Header, iplayer.Id, Author, Version)); + sb.Append(GetMessage(MessageKey.Gone, iplayer.Id)); + sb.Append(GetMessage(MessageKey.Opts, iplayer.Id)); + sb.Append(GetMessage(MessageKey.OptAll, iplayer.Id)); + sb.Append(GetMessage(MessageKey.OptInv, iplayer.Id)); + sb.Append(GetMessage(MessageKey.OptBelt, iplayer.Id)); + sb.Append(GetMessage(MessageKey.OptWear, iplayer.Id)); + sb.Append(GetMessage(MessageKey.OptEvery, iplayer.Id)); + + ReplyPlayer(iplayer, sb.ToString()); } - private void HelpPanel(BasePlayer player, Action messager) + private void HelpPanel(IPlayer iplayer) { - var mCp = hasAllPermissions(player); + var mCp = hasAllPermissions(iplayer); var sb = new StringBuilder(); - sb.Append(GetMessage(MessageKey.Header, player.UserIDString, Author, Version)); - sb.Append(GetMessage(MessageKey.Gone, player.UserIDString)); - sb.Append(GetMessage(MessageKey.Perms, player.UserIDString, player.displayName)); - sb.Append(GetMessage(MessageKey.PermUse, player.UserIDString, mCp[0])); - sb.Append(GetMessage(MessageKey.PermEvery, player.UserIDString, mCp[1])); - sb.Append(GetMessage(MessageKey.PermDeath, player.UserIDString, mCp[2])); - sb.Append(GetMessage(MessageKey.PermLogout, player.UserIDString, mCp[3])); - sb.Append(GetMessage(MessageKey.InvComands, player.UserIDString)); - - messager(player, sb.ToString()); + sb.Append(GetMessage(MessageKey.Header, iplayer.Id, Author, Version)); + sb.Append(GetMessage(MessageKey.Gone, iplayer.Id)); + sb.Append(GetMessage(MessageKey.Perms, iplayer.Id, iplayer.Name)); + sb.Append(GetMessage(MessageKey.PermUse, iplayer.Id, mCp[0])); + sb.Append(GetMessage(MessageKey.PermEvery, iplayer.Id, mCp[1])); + sb.Append(GetMessage(MessageKey.PermDeath, iplayer.Id, mCp[2])); + sb.Append(GetMessage(MessageKey.PermLogout, iplayer.Id, mCp[3])); + sb.Append(GetMessage(MessageKey.InvComands, iplayer.Id)); + + ReplyPlayer(iplayer, sb.ToString()); } #endregion #region Clear Functions - private void DeleteFromEveryone(BasePlayer player, string opt) + private void DeleteFromEveryone(IPlayer iplayer, string opt) { - PrintWarning($"{player.displayName} is trying to run Delete Everyone!"); - if (!HasPermission(player, MyPermissions.ClearOthers)) return; - PrintWarning($"{player.displayName}: Running Delete Everyone Started!"); + PrintWarning($"{iplayer.Name} is trying to run Delete Everyone!"); + if (!iplayer.HasPermission(MyPermissions.ClearOthers)) return; + PrintWarning($"{iplayer.Name}: Running Delete Everyone Started!"); List players = BasePlayer.allPlayerList.ToList(); @@ -273,36 +278,36 @@ private void DeleteFromEveryone(BasePlayer player, string opt) { case "main": inv.Strip(); - SendMessageToAll(GenerateMessage(GetMessage(MessageKey.EveryAllCleaned, player.UserIDString), "red", 18)); + SendMessageToAll(GenerateMessage(GetMessage(MessageKey.EveryAllCleaned, iplayer.Id), "red", 18)); break; case "inv": inv.containerMain.Clear(); - SendMessageToAll(GenerateMessage(GetMessage(MessageKey.EveryInvCleaned, player.UserIDString), "red", 18)); + SendMessageToAll(GenerateMessage(GetMessage(MessageKey.EveryInvCleaned, iplayer.Id), "red", 18)); break; case "belt": inv.containerBelt.Clear(); - SendMessageToAll(GenerateMessage(GetMessage(MessageKey.EveryBeltCleaned, player.UserIDString), "red", 18)); + SendMessageToAll(GenerateMessage(GetMessage(MessageKey.EveryBeltCleaned, iplayer.Id), "red", 18)); break; case "wear": inv.containerWear.Clear(); - SendMessageToAll(GenerateMessage(GetMessage(MessageKey.EveryWearCleaned, player.UserIDString), "red", 18)); + SendMessageToAll(GenerateMessage(GetMessage(MessageKey.EveryWearCleaned, iplayer.Id), "red", 18)); break; default: - var msg = GenerateMessage(GetMessage(MessageKey.OptNotFound, player.UserIDString), "red", 14); - SendChatMessage(player, msg); + var msg = GenerateMessage(GetMessage(MessageKey.OptNotFound, iplayer.Id), "red", 14); + ReplyPlayer(iplayer, msg); break; } } - PrintWarning($"{player.displayName}: Running Delete Everyone Finished!"); + PrintWarning($"{iplayer.Name}: Running Delete Everyone Finished!"); } - private void ClearOneContainer(BasePlayer player, ItemContainer container, string msgKey, Action messager, string option = "main", bool every = false) + private void ClearOneContainer(IPlayer iplayer, ItemContainer container, string msgKey, string option = "main", bool every = false) { // Everyone if (every) { - DeleteFromEveryone(player, option); + DeleteFromEveryone(iplayer, option); return; } @@ -310,82 +315,83 @@ private void ClearOneContainer(BasePlayer player, ItemContainer container, strin container.Clear(); ItemManager.DoRemoves(); - var msg = GenerateMessage(GetMessage(msgKey, player.UserIDString, player.displayName), "green", 14); - messager(player, msg); + var msg = GenerateMessage(GetMessage(msgKey, iplayer.Id, iplayer.Name), "green", 14); + ReplyPlayer(iplayer, msg); } - private void ClearAllContainers(BasePlayer player, string msgKey, Action messager, string option = "main", bool every = false) + private void ClearAllContainers(IPlayer iplayer, string msgKey, string option = "main", bool every = false) { // Everyone if (every) { - DeleteFromEveryone(player, option); + DeleteFromEveryone(iplayer, option); return; } // Singular + var player = iplayer.Object as BasePlayer; player.inventory.Strip(); ItemManager.DoRemoves(); - var msg = GenerateMessage(GetMessage(msgKey, player.UserIDString, player.displayName), "green", 14); - messager(player, msg); - } - - #endregion - - #region Chat and/or Console Commands - private void ClearCovalenceCommand(IPlayer iplayer, string command, string[] args) - { - // This is a client-oriented command, so no need to go further if ran from console - if (iplayer.IsServer) - { - return; - } - - // Get BasePlayer from IPlayer - var player = iplayer.Object as BasePlayer; - - if (!HasPermission(player, MyPermissions.Clear)) - { - return; - } - - if (args.Length == 0) - { - // Default Case - ClearAllContainers(player, MessageKey.AllCleaned, SendConsoleMessage); - return; - } - - var every = ((args.Length > 1) && (args[1].ToLower() == "everyone")); - - var opt = args[0].ToLower(); - + var msg = GenerateMessage(GetMessage(msgKey, iplayer.Id, iplayer.Name), "green", 14); + ReplyPlayer(iplayer, msg); + } + + #endregion + + #region Chat and/or Console Commands + private void ClearCovalenceCommand(IPlayer iplayer, string command, string[] args) + { + // This is a client-oriented command, so no need to go further if ran from console + if (iplayer.IsServer) + { + return; + } + + // Get BasePlayer from IPlayer + var player = iplayer.Object as BasePlayer; + + if (!iplayer.HasPermission(MyPermissions.Clear)) + { + return; + } + + if (args.Length == 0) + { + // Default Case + ClearAllContainers(iplayer, MessageKey.AllCleaned); + return; + } + + var every = ((args.Length > 1) && (args[1].ToLower() == "everyone")); + + var opt = args[0].ToLower(); + switch (opt) { case "main": - ClearAllContainers(player, MessageKey.AllCleaned, SendConsoleMessage, opt, every); + ClearAllContainers(iplayer, MessageKey.AllCleaned, opt, every); break; case "inv": - ClearOneContainer(player, player.inventory.containerMain, MessageKey.InvCleaned, SendConsoleMessage, opt, every); + ClearOneContainer(iplayer, player.inventory.containerMain, MessageKey.InvCleaned, opt, every); break; case "belt": - ClearOneContainer(player, player.inventory.containerBelt, MessageKey.InvCleaned, SendConsoleMessage, opt, every); + ClearOneContainer(iplayer, player.inventory.containerBelt, MessageKey.InvCleaned, opt, every); break; case "wear": - ClearOneContainer(player, player.inventory.containerWear, MessageKey.InvCleaned, SendConsoleMessage, opt, every); + ClearOneContainer(iplayer, player.inventory.containerWear, MessageKey.InvCleaned, opt, every); break; case "help": - HelpPanel(player, SendConsoleMessage); + HelpPanel(iplayer); break; case "cmds": - CommandsPanel(player, SendConsoleMessage); + CommandsPanel(iplayer); break; default: - SendChatMessage(player, GenerateMessage(GetMessage(MessageKey.OptNotFound, player.UserIDString, opt))); + ReplyPlayer(iplayer, GenerateMessage(GetMessage(MessageKey.OptNotFound, iplayer.Id, opt))); break; - } - } + } + } #endregion #region Localization @@ -471,4 +477,4 @@ private string GetMessage(string messageKey, string playerId = null, params obje #endregion } -} +} diff --git a/InventoryCleaner/obj/Debug/net6.0/InventoryCleaner.AssemblyInfo.cs b/InventoryCleaner/obj/Debug/net6.0/InventoryCleaner.AssemblyInfo.cs index 7a4eb44..75e32bd 100644 --- a/InventoryCleaner/obj/Debug/net6.0/InventoryCleaner.AssemblyInfo.cs +++ b/InventoryCleaner/obj/Debug/net6.0/InventoryCleaner.AssemblyInfo.cs @@ -1,10 +1,9 @@ //------------------------------------------------------------------------------ // -// O código foi gerado por uma ferramenta. -// Versão de Tempo de Execução:4.0.30319.42000 +// This code was generated by a tool. // -// As alterações ao arquivo poderão causar comportamento incorreto e serão perdidas se -// o código for gerado novamente. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ diff --git a/InventoryCleaner/obj/Debug/net6.0/InventoryCleaner.GeneratedMSBuildEditorConfig.editorconfig b/InventoryCleaner/obj/Debug/net6.0/InventoryCleaner.GeneratedMSBuildEditorConfig.editorconfig index aae229c..268d474 100644 --- a/InventoryCleaner/obj/Debug/net6.0/InventoryCleaner.GeneratedMSBuildEditorConfig.editorconfig +++ b/InventoryCleaner/obj/Debug/net6.0/InventoryCleaner.GeneratedMSBuildEditorConfig.editorconfig @@ -7,4 +7,4 @@ build_property.InvariantGlobalization = build_property.PlatformNeutralAssembly = build_property._SupportedPlatformList = Linux,macOS,Windows build_property.RootNamespace = InventoryCleaner -build_property.ProjectDir = c:\Users\TheWh\source\repos\InventoryCleaner\InventoryCleaner\ +build_property.ProjectDir = C:\Users\TheWh\Documents\GitHub\InventoryCleaner\InventoryCleaner\ diff --git a/InventoryCleaner/obj/Debug/net6.0/InventoryCleaner.assets.cache b/InventoryCleaner/obj/Debug/net6.0/InventoryCleaner.assets.cache index 51e996352217071585b42b05d4a9195a2bf11acb..9b2abf813d77bdace8f8862429b317d9e2f034f3 100644 GIT binary patch delta 55 zcmV-70LcH00gM4DP)kQa3IG5AFw#l8sAl^@Q6Qq>ihom7>#&og;CZXfdk2Z9R^QvW Nh> delta 55 zcmeBS>|xXl@OF3PVqjpftZLZVZgj0l;mUy=md;YU>umi|FG5;G*ykr?l-it^?wDvO LJ<)+