Иконка ресурса

FREE ItemCleaner : 0.0.6 0.0.6

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Oxide.Core.Libraries.Covalence;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace Oxide.Plugins {
    [Info("Item Cleaner", "Lorddy", "0.0.6")]
    [Description("Remove specified item from all containers and players")]
    public class ItemCleaner : RustPlugin {
#region Fields
        private const string PERMISSION_USE = "itemcleaner.use";
#endregion
#region Lang
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                ["CmdHelp1"]
                = "<color=orange>/itemcleaner remove <Item Display Name| Item Shortname | Item ID></color> <color=yellow>[optional: Entity Owner Name] [optional:\"priv\" To look in current privilege] </color> - Clear all containers and players of the specified item", ["CmdHelp2"] = "<color=orange>/itemcleaner find  <Item Display Name| Item Shortname | Item ID></color> <color=yellow>[optional: Entity Owner Name] [optional:\"priv\" To look in current privilege] </color>- Find all containers and players of the specified item", ["ItemNotFound"] = "Item Definition Not Found",  //["PlayerNotFound"] = "Player Not Found",
                ["NoPerm"]
                = "You don't have permission to use this command", ["RemovedFromStorage"] = "Removed {0} {1} item from {2} Storage Container", ["RemovedFromPlayer"] = "Removed {0} {1} item from Player {2}.", ["FoundFromStorage"] = "Found {0} {1} item from {2} Storage Container", ["FoundFromPlayer"] = "Found {0} {1} item from Player {2}.", ["TimeTaken"] = "Item Cleaner Command Took {0} ms", ["FoundStorage"] = "Checking {0} Storage Containers", ["StorageSearchFinish"] = "Storage Container Search Finished", ["PlayerSearchFinish"] = "Player Inventory Search Finished",
            }
            , this);
        }
#endregion
#region Hooks
        private void Loaded() {
            permission.RegisterPermission(PERMISSION_USE, this);
        }
#endregion
#region Commands
        [ChatCommand("itemcleaner")]
        private void ItemCleanerCommand(BasePlayer player, string command, string[] args) {
            if (!(permission.UserHasPermission(player.UserIDString, PERMISSION_USE))) {
                PrintToChat(player, lang.GetMessage("NoPerm", this, player.UserIDString));
                return;
            }
            if (args.Length < 2) {
                PrintToChat(player, lang.GetMessage("CmdHelp1", this, player.UserIDString));
                PrintToChat(player, lang.GetMessage("CmdHelp2", this, player.UserIDString));
                return;
            }
            bool remove = false;
            switch (args[0].ToLower()) {
                case "remove" : remove = true;
                break;
                case "find" : remove = false;
                break;
                default : PrintToChat(player, lang.GetMessage("CmdHelp1", this, player.UserIDString));
                PrintToChat(player, lang.GetMessage("CmdHelp2", this, player.UserIDString));
                return;
            }
            bool priv = args.Contains("priv");
            var itemname = args[1].ToLower();
            var itemId = -1;
            int.TryParse(args[1].ToLower(), out itemId);
            ItemDefinition itemDefinition = null;
            IPlayer entityOwner = null;
            if (args.Length >= 3) entityOwner = covalence.Players.FindPlayer(args[2].ToLower());
            for (int i = 0; i < ItemManager.itemList.Count; i++) {
                if (ItemManager.itemList[i].displayName.english.ToLower() == itemname.ToLower() || ItemManager.itemList[i].shortname == itemname.ToLower() || (itemId != -1 && ItemManager.itemList[i].itemid == itemId)) {
                    itemDefinition = ItemManager.itemList[i];
                    break;
                }
            }
            if (itemDefinition == null) {
                PrintToChat(player, lang.GetMessage("ItemNotFound", this, player.UserIDString));
                return;
            }
            RemoveItem(player, itemDefinition, remove, priv ? null : entityOwner, priv);
        }
#endregion
#region Methods
        private void RemoveItem(BasePlayer player, ItemDefinition itemDefinition, bool remove = true, IPlayer entityOwner = null, bool priv = false) {
            DateTime startTime = DateTime.Now;
            //var scs = Resources.FindObjectsOfTypeAll<StorageContainer>();
            var playerPriv = player?.GetBuildingPrivilege();
            var scs = BaseNetworkable.serverEntities.OfType<StorageContainer>();
            int i = 0;
            foreach(var sc in scs) {
                if (sc is LootContainer || !sc.OwnerID.IsSteamId()) {
                    continue;
                }
                timer.In(i * 0.01f, () => RemoveItem(sc, player, itemDefinition, playerPriv, remove, entityOwner, priv));
                i++;
            }
            timer.In((i + 1) * 0.01f, () => PrintToChat(player, string.Format(lang.GetMessage("StorageSearchFinish", this, player.UserIDString))));
            string storageFound = string.Format(lang.GetMessage("FoundStorage", this, player.UserIDString), i);
            //Puts(storageFound);
            PrintToChat(player, storageFound);
            int j = 0;
            foreach(var p in BasePlayer.allPlayerList) {
                timer.In(j * 0.01f, () => RemoveItem(p, player, itemDefinition, playerPriv, remove, entityOwner, priv));
                j++;
            }
            timer.In((j + 1) * 0.01f, () => PrintToChat(player, string.Format(lang.GetMessage("PlayerSearchFinish", this, player.UserIDString))));
            string timeTaken = string.Format(lang.GetMessage("TimeTaken", this, player.UserIDString), DateTime.Now.Subtract(startTime).TotalMilliseconds);
            //Puts(timeTaken);
            PrintToChat(player, timeTaken);
        }
        void RemoveItem(StorageContainer sc, BasePlayer player, ItemDefinition itemDefinition, BuildingPrivlidge playerPriv, bool remove = true, IPlayer entityOwner = null, bool priv = false) {
            if (entityOwner != null && sc.OwnerID != ulong.Parse(entityOwner.Id)) return;
            if (priv == false || (priv && sc?.GetBuildingPrivilege()?.net.ID == playerPriv?.net.ID)) {
                RemoveItem(player, itemDefinition, sc, remove);
            }
        }
        void RemoveItem(BasePlayer bp, BasePlayer player, ItemDefinition itemDefinition, BuildingPrivlidge playerPriv, bool remove = true, IPlayer entityOwner = null, bool priv = false) {
            if (entityOwner != null && bp.UserIDString != entityOwner.Id) return;
            if (priv == false || (priv && bp?.GetBuildingPrivilege()?.net.ID == playerPriv?.net.ID)) {
                RemoveItem(player, itemDefinition, bp, remove);
            }
        }
        private void RemoveItem(BasePlayer player, ItemDefinition itemDefinition, BasePlayer target, bool remove) {
            if (target == null) return;
            PlayerInventory inventory = target.inventory;
            if (inventory == null) return;
            List<Item> list = inventory.containerMain.itemList.FindAll((Item x) => x.info.itemid == itemDefinition.itemid);
            list.AddRange(inventory.containerBelt.itemList.Where((Item x) => x.info.itemid == itemDefinition.itemid));
            list.AddRange(inventory.containerWear.itemList.Where((Item x) => x.info.itemid == itemDefinition.itemid));
            if (list.Count > 0) {
                string msg = string.Format(lang.GetMessage(remove ? "RemovedFromPlayer" : "FoundFromPlayer", this, player.UserIDString), list.Count, itemDefinition.displayName.english, target.displayName);
                ;
                //Puts(msg);
                PrintToChat(player, msg);
                if (remove) foreach (var item in list) {
                    item.Remove();
                }
            }
        }
        private void RemoveItem(BasePlayer player, ItemDefinition itemDefinition, StorageContainer sc, bool remove) {
            ItemContainer inventory = sc.inventory;
            if (inventory == null) return;
            List<Item> list = inventory.FindItemsByItemID(itemDefinition.itemid);
            //Puts($"{sc.OwnerID}'s Container Item List: [{string.Join(", ", sc.inventory.itemList.Select(x => x.info.displayName.english))}]");
            if (list.Count > 0) {
                string msg = string.Format(lang.GetMessage(remove ? "RemovedFromStorage" : "FoundFromStorage", this, player.UserIDString), list.Count, itemDefinition.displayName.english, sc.net.ID);
                //Puts(msg);
                PrintToChat(player, msg);
                if (remove) foreach (var item in list) {
                    item.Remove();
                }
            }
        }
#endregion
    }
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху