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

FREE Loadoutless : 1.3.3 1.3.3

Нет прав для скачивания
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.3")]
    [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";
        const string permission_resetdefault = "loadoutless.resetdefault";
        //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);
            permission.RegisterPermission(permission_resetdefault, 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;
                    case "reset" : if (permission.UserHasPermission(player.UserIDString, permission_resetdefault)) {
                        resetPlayersLoadout();
                    }
                    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 resetPlayersLoadout() {
    PlayerLoadout currentUser;
    string[] raw_files = Interface.Oxide.DataFileSystem.GetFiles(file_main);
    if (raw_files != null) {
        foreach (string item in raw_files) {
            currentUser = JsonConvert.DeserializeObject<PlayerLoadout>(item);
            currentUser.items = JsonConvert.DeserializeObject<List<LoadoutItem>>(myConfig.Default_Loadout);
            // WORKING ON!
            update_user(currentUser);
        }
    }
}
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._userId = player.UserIDString;
    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 {
    PlayerLoadout user;
    string raw_player_file = Interface.Oxide.DataFileSystem.ReadObject<string>(file_main + player.UserIDString);
    user = JsonConvert.DeserializeObject<PlayerLoadout>(raw_player_file);
    if (user._userId == null) {
        user._userId = player.UserIDString;
        update_user(user);
    }
    return user;
}
}
//Rewrites the player file.void update_user(BasePlayer player, PlayerLoadout user) {
Interface.Oxide.DataFileSystem.WriteObject<string>(file_main + player.UserIDString, JsonConvert.SerializeObject(user));
}
void update_user(PlayerLoadout user) {
    Interface.Oxide.DataFileSystem.WriteObject<string>(file_main + user._userId, 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 _userId;
    public string _username;
    public List<LoadoutItem> items = new List<LoadoutItem>();
    public PlayerLoadout() {
    }
    [JsonConstructor]
    public PlayerLoadout(string userId, string userName, List<LoadoutItem> Items) {
        _userId = userId;
        _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 оценок
Сверху