Skip to content

Commit

Permalink
Merge pull request #1 from Nikedemos/master
Browse files Browse the repository at this point in the history
Converted separate chat/console commands into 1 covalence one
  • Loading branch information
J-Pster authored Nov 8, 2022
2 parents d90c796 + 93e68a6 commit 74e6f41
Show file tree
Hide file tree
Showing 9 changed files with 95 additions and 131 deletions.
194 changes: 79 additions & 115 deletions InventoryCleaner/InventoryCleaner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down Expand Up @@ -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<bool> bools = new List<bool>();

foreach (var perm in _permissions)
{
bools.Add(player.IPlayer.HasPermission(perm));
bools.Add(iplayer.HasPermission(perm));
}

return bools.ToArray();
Expand Down Expand Up @@ -188,6 +193,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 /

AddCovalenceCommand(new string[] {"clearinv", "cleaninv", "clear.inv", "clean.inv", "inv.clear", "invclear", "inv.clean", "invclean"}, nameof(ClearCovalenceCommand), MyPermissions.Clear);
}

#endregion
Expand Down Expand Up @@ -217,47 +227,47 @@ void OnPlayerDisconnected(BasePlayer player, string reason)

#region Panel Functions

private void CommandsPanel(BasePlayer player, Action<BasePlayer, string> 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<BasePlayer, string> 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<BasePlayer> players = BasePlayer.allPlayerList.ToList();

Expand All @@ -268,166 +278,120 @@ 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<BasePlayer, string> 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;
}

// Singular
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<BasePlayer, string> 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);
var msg = GenerateMessage(GetMessage(msgKey, iplayer.Id, iplayer.Name), "green", 14);
ReplyPlayer(iplayer, msg);
}

#endregion

#region Chat Commands

[ChatCommand("clearinv")]
private void ClearCommand(BasePlayer player, string command, string[] args)
#region Chat and/or Console Commands
private void ClearCovalenceCommand(IPlayer iplayer, string command, string[] args)
{
// Check Permission
var has = HasPermission(player, MyPermissions.Clear);
if (!has) return;

// Default Case
if (args.Length == 0)
// This is a client-oriented command, so no need to go further if ran from console
if (iplayer.IsServer)
{
ClearAllContainers(player, MessageKey.AllCleaned, SendChatMessage);
return;
}

// Check if every is true and get the option
var every = ((args.Length > 1) && (args[1].ToLower() == "everyone"));

var opt = args[0].ToLower();

switch (opt)
// Get BasePlayer from IPlayer
var player = iplayer.Object as BasePlayer;

if (!iplayer.HasPermission(MyPermissions.Clear))
{
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;
return;
}
}

#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)
if (args.Length == 0)
{
ClearAllContainers(player, MessageKey.AllCleaned, SendConsoleMessage);
// Default Case
ClearAllContainers(iplayer, MessageKey.AllCleaned);
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();

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
Expand Down Expand Up @@ -513,4 +477,4 @@ private string GetMessage(string messageKey, string playerId = null, params obje
#endregion

}
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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\
Binary file modified InventoryCleaner/obj/Debug/net6.0/InventoryCleaner.assets.cache
Binary file not shown.
10 changes: 5 additions & 5 deletions InventoryCleaner/obj/InventoryCleaner.csproj.nuget.dgspec.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
{
"format": 1,
"restore": {
"C:\\Users\\TheWh\\source\\repos\\InventoryCleaner\\InventoryCleaner\\InventoryCleaner.csproj": {}
"C:\\Users\\TheWh\\Documents\\GitHub\\InventoryCleaner\\InventoryCleaner\\InventoryCleaner.csproj": {}
},
"projects": {
"C:\\Users\\TheWh\\source\\repos\\InventoryCleaner\\InventoryCleaner\\InventoryCleaner.csproj": {
"C:\\Users\\TheWh\\Documents\\GitHub\\InventoryCleaner\\InventoryCleaner\\InventoryCleaner.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Users\\TheWh\\source\\repos\\InventoryCleaner\\InventoryCleaner\\InventoryCleaner.csproj",
"projectUniqueName": "C:\\Users\\TheWh\\Documents\\GitHub\\InventoryCleaner\\InventoryCleaner\\InventoryCleaner.csproj",
"projectName": "InventoryCleaner",
"projectPath": "C:\\Users\\TheWh\\source\\repos\\InventoryCleaner\\InventoryCleaner\\InventoryCleaner.csproj",
"projectPath": "C:\\Users\\TheWh\\Documents\\GitHub\\InventoryCleaner\\InventoryCleaner\\InventoryCleaner.csproj",
"packagesPath": "C:\\Users\\TheWh\\.nuget\\packages\\",
"outputPath": "C:\\Users\\TheWh\\source\\repos\\InventoryCleaner\\InventoryCleaner\\obj\\",
"outputPath": "C:\\Users\\TheWh\\Documents\\GitHub\\InventoryCleaner\\InventoryCleaner\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\TheWh\\AppData\\Roaming\\NuGet\\NuGet.Config",
Expand Down
6 changes: 3 additions & 3 deletions InventoryCleaner/obj/project.assets.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Users\\TheWh\\source\\repos\\InventoryCleaner\\InventoryCleaner\\InventoryCleaner.csproj",
"projectUniqueName": "C:\\Users\\TheWh\\Documents\\GitHub\\InventoryCleaner\\InventoryCleaner\\InventoryCleaner.csproj",
"projectName": "InventoryCleaner",
"projectPath": "C:\\Users\\TheWh\\source\\repos\\InventoryCleaner\\InventoryCleaner\\InventoryCleaner.csproj",
"projectPath": "C:\\Users\\TheWh\\Documents\\GitHub\\InventoryCleaner\\InventoryCleaner\\InventoryCleaner.csproj",
"packagesPath": "C:\\Users\\TheWh\\.nuget\\packages\\",
"outputPath": "C:\\Users\\TheWh\\source\\repos\\InventoryCleaner\\InventoryCleaner\\obj\\",
"outputPath": "C:\\Users\\TheWh\\Documents\\GitHub\\InventoryCleaner\\InventoryCleaner\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\TheWh\\AppData\\Roaming\\NuGet\\NuGet.Config",
Expand Down
Loading

0 comments on commit 74e6f41

Please # to comment.