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

FREE Loadoutless : 1.3.2 1.3.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Oxide.Core;
using System;
using Newtonsoft.Json;
using System.Collections.Generic;
using Rust;
using UnityEngine;
using System.Linq;
namespace Oxide.Plugins {
    [Info("Loadoutless", "Kechless", "1.3.2")]
    [Description("Players can respawn with a loadout")]
    class Loadoutless : RustPlugin {
#region Variables
        private PluginConfig myConfig;
        //PERMISSIONS
        const string permission_save = "loadoutless.save";
        const string permission_setdefault = "loadoutless.setdefault";
        const string permission_getloadout = "loadoutless.getloadout";
        const string permission_banitem = "loadoutless.banitem";
        //FILES
        const string file_banlist = "Loadoutless_itembanlist";
        const string file_main = "Loadoutless_folder/";
#endregion
#region Localization
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                ["Error_Insuffarg"]
                = "Insufficient arguments!", ["Error_Noitem"] = "No item selected!", ["Error_Itemnotfound"] = "Item not found!", ["Error_Filenotexist"] = "Playerfile doesn't exist.", ["Error_Creatingnewfile"] = "Creating a new playerfile...", ["Cmd_Removebanitem"] = "Item is removed from the banfile.", ["Cmd_Removebanitem_notinfile"] = "Item was not banned!", ["Cmd_Banitem_already"] = "Item is already banned!", ["Cmd_Banitem"] = "Item <color=lime>sucessfully added</color> to the banfile!", ["Cmd_Setdefault"] = "Default loadout has <color=lime>succesfully been set!</color>", ["Cmd_Noperm"] = "You don't have the permsission to do that!", ["Cmd_Saved"] = "Loadout was <color=lime>sucessfully saved!</color>", ["Cmd_inv_added"] = "All inventory items are saved in the ban file"
            }
            , this);
        }
#endregion
#region Config
        private void Init() {
            myConfig = Config.ReadObject<PluginConfig>();
            permission.RegisterPermission(permission_save, this);
            permission.RegisterPermission(permission_setdefault, this);
            permission.RegisterPermission(permission_getloadout, this);
            permission.RegisterPermission(permission_banitem, this);
        }
        protected override void LoadDefaultConfig() {
            Puts("Creating a new configuration file");
            Config.WriteObject(GetDefaultConfig(), true);
        }
        private PluginConfig GetDefaultConfig() {
            return new PluginConfig {
                //default loadout can be set with in-game command '/loadout setdefault'
                Default_Loadout = "[{\"itemid\":-699558439,\"bp\":false,\"skinid\":0,\"container\":\"wear\",\"slot\":0,\"amount\":1,\"weapon\":false,\"mods\":[]},{\"itemid\":1850456855,\"bp\":false,\"skinid\":0,\"container\":\"wear\",\"slot\":1,\"amount\":1,\"weapon\":false,\"mods\":[]},{\"itemid\":-194953424,\"bp\":false,\"skinid\":0,\"container\":\"wear\",\"slot\":2,\"amount\":1,\"weapon\":false,\"mods\":[]},{\"itemid\":-1211166256,\"bp\":false,\"skinid\":0,\"container\":\"main\",\"slot\":0,\"amount\":74,\"weapon\":false,\"mods\":[]},{\"itemid\":1545779598,\"bp\":false,\"skinid\":0,\"container\":\"belt\",\"slot\":1,\"amount\":1,\"weapon\":true,\"mods\":[442289265]}]"
            }
            ;
        }
        private void SaveConfig() {
            Config.WriteObject(myConfig, true);
        }
        private class PluginConfig {
            public string Default_Loadout;
        }
#endregion
#region Commands
        [ChatCommand("loadout")]
        void loadoutcommand(BasePlayer player, string command, string[] args) {
            if (args.Length == 0) {
                SendMessage(player, "Error_Insuffarg");
            }
            else {
                switch (args[0].ToLower()) {
                    //saves players current loadout with command '/loadout save'.case "save":
                    PlayerLoadout user = get_user(player);
                    if (permission.UserHasPermission(player.UserIDString, permission_save)) {
                        user.items = check_banneditems(getPlayerLoadout(player));
                        SendMessage(player, "Cmd_Saved");
                        update_user(player, user);
                    }
                    else {
                        SendMessage(player, "Cmd_Noperm");
                    }
                    break;
                    //sets default for all players when they don't have a player data file '/loadout setdefault'.case "setdefault":
                    if (permission.UserHasPermission(player.UserIDString, permission_setdefault)) {
                        myConfig.Default_Loadout = JsonConvert.SerializeObject(getPlayerLoadout(player));
                        SaveConfig();
                        SendMessage(player, "Cmd_Setdefault");
                    }
                    else {
                        SendMessage(player, "Cmd_Noperm");
                    }
                    break;
                    //bans current item in handslot and adds it to the banfile '/loadout banitem'.case "banitem":
                    if (permission.UserHasPermission(player.UserIDString, permission_banitem)) {
                        try {
                            List<string> ban_list = load_banfile();
                            string itemid = player.GetActiveItem().info.itemid.ToString();
                            if (check_banfile(itemid) == false) {
                                ban_list.Add(itemid);
                                update_banfile(ban_list);
                                SendMessage(player, "Cmd_Banitem");
                            }
                            else {
                                SendMessage(player, "Cmd_Banitem_already");
                            }
                        }
                        catch (NullReferenceException) {
                            SendMessage(player, "Error_Noitem");
                        }
                    }
                    else {
                        SendMessage(player, "Cmd_Noperm");
                    }
                    break;
                    //removes current item in handslot from the banfile '/loadout removebanitem'.case "removebanitem":
                    if (permission.UserHasPermission(player.UserIDString, permission_banitem)) {
                        try {
                            string itemid = player.GetActiveItem().info.itemid.ToString();
                            if (check_banfile(itemid) == true) {
                                update_banfile(removeItemBanlist(load_banfile(), itemid));
                                SendMessage(player, "Cmd_Removebanitem");
                            }
                            else {
                                SendMessage(player, "Cmd_Removebanitem_notinfile");
                            }
                        }
                        catch (NullReferenceException) {
                            SendMessage(player, "Cmd_Error_Noitem");
                        }
                    }
                    else {
                        SendMessage(player, "Cmd_Noperm");
                    }
                    break;
                    case "baninv" : if (permission.UserHasPermission(player.UserIDString, permission_banitem)) {
                        addInvban(player.inventory.AllItems());
                        SendMessage(player, "Cmd_inv_added");
                    }
                    else {
                        SendMessage(player, "Cmd_Noperm");
                    }
                    break;
                    default : SendMessage(player, "Error_Insuffarg");
                    break;
                }
            }
        }
#endregion
#region Hooks
        object OnPlayerSpawn(BasePlayer player) {
            if (permission.UserHasPermission(player.UserIDString, permission_getloadout)) {
                give_loadout(player);
            }
            return null;
        }
        //On player init checks if player file exsits if not, it will create one.void OnPlayerInit(BasePlayer player)
        {
            if (!Interface.Oxide.DataFileSystem.ExistsDatafile(file_main + player.UserIDString)) {
                PlayerLoadout user = new PlayerLoadout();
                user._username = player.displayName.ToString();
                user.items = JsonConvert.DeserializeObject<List<LoadoutItem>>(myConfig.Default_Loadout);
                update_user(player, user);
            }
        }
        //Set player inventory when player clicks on respawn.void OnPlayerRespawned(BasePlayer player)
        {
            if (permission.UserHasPermission(player.UserIDString, permission_getloadout)) {
                give_loadout(player);
            }
        }
#endregion
#region Methodes
        public void addInvban(Item[] invItems) {
            List<string> list = new List<string>();
            List<string> ban_file = load_banfile();
            foreach (var item in invItems) {
                if (check_banfile(item.info.itemid.ToString()) == false) {
                    ban_file.Add(item.info.itemid.ToString());
                }
                else {
                    PrintToConsole(item.info.shortname + "already in banfile");
                }
                update_banfile(ban_file);
            }
        }
        //Reads player file and returns this as a object.PlayerLoadout get_user(BasePlayer player)
        {
            if (!Interface.Oxide.DataFileSystem.ExistsDatafile(file_main + player.UserIDString)) {
                PlayerLoadout user = new PlayerLoadout();
                user._username = player.displayName.ToString();
                user.items = JsonConvert.DeserializeObject<List<LoadoutItem>>(myConfig.Default_Loadout);
                update_user(player, user);
                SendMessage(player, "Error_Filenotexist");
                SendMessage(player, "Error_Creatingnewfile");
                return user;
            }
            else {
                string raw_player_file = Interface.Oxide.DataFileSystem.ReadObject<string>(file_main + player.UserIDString);
                return JsonConvert.DeserializeObject<PlayerLoadout>(raw_player_file);
            }
        }
        //Rewrites the player file.void update_user(BasePlayer player, PlayerLoadout user)
        {
            Interface.Oxide.DataFileSystem.WriteObject<string>(file_main + player.UserIDString, JsonConvert.SerializeObject(user));
        }
        //Updates the ban file.void update_banfile(List<string> ban_list)
        {
            Interface.Oxide.DataFileSystem.WriteObject<string>(file_main + file_banlist, JsonConvert.SerializeObject(ban_list));
        }
        //Checks if itemid already exists in the ban file.bool check_banfile(string itemid)
        {
            List<string> ban_file = load_banfile();
            if (ban_file.Contains(itemid)) {
                return true;
            }
            else {
                return false;
            }
        }
        //Removes itemid from the ban file.List<string> removeItemBanlist(List<string> banfile, string itemid)
        {
            List<string> new_banfile = new List<string>();
            foreach (string item in banfile) {
                if (item != itemid) {
                    new_banfile.Add(item);
                }
            }
            return new_banfile;
        }
        List<string> load_banfile() {
            List<string> ban_file;
            //When ban file is needed checks if it exists if not, it will create one.if (!Interface.Oxide.DataFileSystem.ExistsDatafile(file_main + file_banlist))
            {
                ban_file = new List<string>();
            }
            else {
                string raw_banfile = Interface.Oxide.DataFileSystem.ReadObject<string>(file_main + file_banlist);
                ban_file = JsonConvert.DeserializeObject<List<string>>(raw_banfile);
            }
            return ban_file;
        }
        //Gets player's loadout.static List<LoadoutItem> getPlayerLoadout(BasePlayer player)
        {
            List<LoadoutItem> Litem = new List<LoadoutItem>();
            foreach (Item item in player.inventory.containerWear.itemList) {
                if (item != null) {
                    LoadoutItem Iitem = ProcessItem(item, "wear");
                    Litem.Add(Iitem);
                }
            }
            foreach (Item item in player.inventory.containerMain.itemList) {
                if (item != null) {
                    LoadoutItem Iitem = ProcessItem(item, "main");
                    Litem.Add(Iitem);
                }
            }
            foreach (Item item in player.inventory.containerBelt.itemList) {
                if (item != null) {
                    LoadoutItem Iitem = ProcessItem(item, "belt");
                    Litem.Add(Iitem);
                }
            }
            return Litem;
        }
        static private LoadoutItem ProcessItem(Item item, string container) {
            LoadoutItem iItem = new LoadoutItem();
            iItem.amount = item.amount;
            iItem.mods = new List<int>();
            iItem.container = container;
            iItem.skinid = Convert.ToInt32(item.skin);
            iItem.itemid = item.info.itemid;
            iItem.weapon = false;
            iItem.slot = item.position;
            if (item.info.category.ToString() == "Weapon") {
                BaseProjectile weapon = item.GetHeldEntity() as BaseProjectile;
                if (weapon != null) {
                    if (weapon.primaryMagazine != null) {
                        iItem.weapon = true;
                        if (item.contents != null) foreach (var mod in item.contents.itemList) {
                            if (mod.info.itemid != 0) iItem.mods.Add(mod.info.itemid);
                        }
                    }
                }
            }
            return iItem;
        }
        private Item BuildWeapon(int id, ulong skin, List<int> mods) {
            Item item = CreateByItemID(id, 1, skin);
            var weapon = item.GetHeldEntity() as BaseProjectile;
            if (weapon != null) {
                (item.GetHeldEntity() as BaseProjectile).primaryMagazine.contents = (item.GetHeldEntity() as BaseProjectile).primaryMagazine.capacity;
            }
            if (mods != null) {
                foreach (var mod in mods) {
                    item.contents.AddItem(BuildItem(mod, 1, 0).info, 1);
                }
            }
            return item;
        }
        private Item BuildItem(int itemid, int amount, ulong skin) {
            if (amount < 1) amount = 1;
            Item item = CreateByItemID(itemid, amount, skin);
            return item;
        }
        private Item CreateByItemID(int itemID, int amount = 1, ulong skin = 0) {
            return ItemManager.CreateByItemID(itemID, amount, skin);
        }
        bool GiveItem(PlayerInventory inv, Item item, ItemContainer container = null, int position = 0) {
            if (item == null) {
                return false;
            }
            return (((container != null) && item.MoveToContainer(container, position, true)) || (item.MoveToContainer(inv.containerMain, position, true) || item.MoveToContainer(inv.containerBelt, position, true)));
        }
        List<LoadoutItem> check_banneditems(List<LoadoutItem> list) {
            List<LoadoutItem> new_list = new List<LoadoutItem>();
            List<string> ban_file = load_banfile();
            foreach (LoadoutItem item in list) {
                if (!ban_file.Contains(item.itemid.ToString())) {
                    new_list.Add(item);
                }
            }
            return new_list;
        }
        //Clears players inventory and gives loadout of the player
        public object give_loadout(BasePlayer player) {
            var user = get_user(player);
            player.inventory.Strip();
            foreach (var kitem in user.items) {
                GiveItem(player.inventory, kitem.weapon ? BuildWeapon(kitem.itemid, Convert.ToUInt32(kitem.skinid), kitem.mods) : BuildItem(kitem.itemid, kitem.amount, Convert.ToUInt32(kitem.skinid)), kitem.container == "belt" ? player.inventory.containerBelt : kitem.container == "wear" ? player.inventory.containerWear : player.inventory.containerMain, kitem.slot);
            }
            return true;
        }
        //Send message to player.public void SendMessage(BasePlayer player, string message)
        {
            PrintToChat(player, lang.GetMessage(message, this, player.UserIDString));
        }
#endregion
#region Classes
        public class PlayerLoadout {
            public string _username;
            public List<LoadoutItem> items = new List<LoadoutItem>();
            public PlayerLoadout() {
            }
            [JsonConstructor]
            public PlayerLoadout(string userName, List<LoadoutItem> Items) {
                _username = userName;
                items = Items;
            }
        }
        public class LoadoutItem {
            public int itemid;
            public bool bp;
            public int skinid;
            public string container;
            public int slot;
            public int amount;
            public bool weapon;
            public List<int> mods = new List<int>();
            public LoadoutItem() {
            }
            [JsonConstructor]
            public LoadoutItem(int pitemid, bool pbp, int pskinid, string pcontainer, int pamount, int pslot, bool pweapon, List<int> pmods) {
                itemid = pitemid;
                pbp = bp;
                skinid = pskinid;
                container = pcontainer;
                amount = pamount;
                slot = pslot;
                weapon = pweapon;
                mods = pmods;
            }
        }
#endregion
    }
}

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