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

FREE BlueprintManager : 1.1.6 1.1.6

Нет прав для скачивания
C#:
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("Blueprint Manager", "Orange", "1.1.6")]
    [Description("Manage blueprints on your server easily")]
    public class BlueprintManager : RustPlugin
    {
        #region Vars
        
        private Blueprints data = new Blueprints();
        private const string permLVL1 = "blueprintmanager.lvl1";
        private const string permLVL2 = "blueprintmanager.lvl2";
        private const string permLVL3 = "blueprintmanager.lvl3";
        private const string permAll = "blueprintmanager.all";
        private const string permDefault = "blueprintmanager.default";
        private const string permAdmin = "blueprintmanager.admin";
        
        private class Blueprints
        {
            public List<int> workbench1 = new List<int>();
            public List<int> workbench2 = new List<int>();
            public List<int> workbench3 = new List<int>();
            public List<int> allBlueprints = new List<int>();
            public List<int> defaultBlueprints = new List<int>();
        } 
        
        #endregion

        #region Oxide Hooks

        private void Init()
        {
            permission.RegisterPermission(permAll, this);
            permission.RegisterPermission(permLVL1, this);
            permission.RegisterPermission(permLVL2, this);
            permission.RegisterPermission(permLVL3, this);
            permission.RegisterPermission(permAdmin, this);
            permission.RegisterPermission(permDefault, this);
            cmd.AddConsoleCommand("blueprintmanager", this, nameof(cmdBlueprintsConsole));
        }

        private void OnServerInitialized()
        {
            CheckBlueprints();
            CheckPlayers();
        }
        
        private void OnPlayerConnected(BasePlayer player)
        {
            CheckPlayer(player);
        }

        #endregion

        #region Core
        
        private void CheckBlueprints()
        {
            foreach (var bp in ItemManager.bpList)
            {
                if (bp.userCraftable && bp.defaultBlueprint == false)
                {
                    var itemID = bp.targetItem.itemid;
                    var shortname = bp.targetItem.shortname;
                    if (config.blacklist?.Contains(shortname) ?? false)
                    {
                        continue;
                    }

                    switch (bp.workbenchLevelRequired)
                    {
                        case 0:
                        case 1:
                            data.workbench1.Add(itemID);
                            break;
                        
                        case 2:
                            data.workbench2.Add(itemID);
                            break;
                        
                        case 3:
                            data.workbench3.Add(itemID);
                            break;
                    }

                    if (config.defaultBlueprints?.Contains(shortname) ?? false)
                    {
                        data.defaultBlueprints.Add(itemID);
                    }
                    
                    data.allBlueprints.Add(itemID);
                }
            }
        }

        private void CheckPlayers()
        {
            timer.Once(1f, () =>
            {
                foreach (var player in BasePlayer.activePlayerList)
                {
                    OnPlayerConnected(player);
                }
            });
        }

        private void CheckPlayer(BasePlayer player)
        {
            var blueprints = GetBlueprints(player);
            UnlockBlueprints(player, blueprints);
        }

        private List<int> GetBlueprints(BasePlayer player)
        {
            var list = new List<int>();

            if (permission.UserHasPermission(player.UserIDString, permDefault))
            {
                list.AddRange(data.defaultBlueprints);
            }

            if (permission.UserHasPermission(player.UserIDString, permAll))
            {
                list.AddRange(data.allBlueprints);
                return list;
            }
            
            if (permission.UserHasPermission(player.UserIDString, permLVL3))
            {
                list.AddRange(data.workbench3);
            }
            
            if (permission.UserHasPermission(player.UserIDString, permLVL2))
            {
                list.AddRange(data.workbench2);
            }
            
            if (permission.UserHasPermission(player.UserIDString, permLVL1))
            {
                list.AddRange(data.workbench1);
            }

            return list;
        }

        private void UnlockBlueprints(BasePlayer player, List<int> blueprints)
        {
            var info = player.PersistantPlayerInfo;
             
            foreach (var blueprint in blueprints)
            {
                if (info.unlockedItems.Contains(blueprint) == false)
                {
                    info.unlockedItems.Add(blueprint);
                }
            }
            
            player.PersistantPlayerInfo = info;
            player.SendNetworkUpdateImmediate();
            player.ClientRPCPlayer(null, player, "UnlockedBlueprint", 0);
        } 

        private void ResetBlueprints(BasePlayer player)
        {
            var info = player.PersistantPlayerInfo;
            info.unlockedItems = new List<int>();
            player.PersistantPlayerInfo = info;
            player.SendNetworkUpdateImmediate();
            player.ClientRPCPlayer(null, player, "UnlockedBlueprint", 0);
        }
        
        private BasePlayer FindPlayer(string nameOrID)
        {
            var targets = BasePlayer.activePlayerList.Where(x => x.UserIDString == nameOrID || x.displayName.ToLower().Contains(nameOrID.ToLower())).ToArray();
            
            if (targets.Length == 0)
            {
                PrintWarning(GetMessage("No Players", nameOrID));
                return null;
            }

            if (targets.Length > 1)
            {
                PrintWarning(GetMessage("Multiple Players", targets.Select(x => x.displayName).ToSentence()));
                return null;
            }

            return targets[0];
        }

        #endregion

        #region Commands

        private void cmdBlueprintsConsole(ConsoleSystem.Arg arg)
        {
            var player = arg.Player();
            if (player != null && permission.UserHasPermission(player.UserIDString, permAdmin) == false)
            {
                Message(arg, "Permission");
                return;
            }

            var args = arg.Args;
            if (args == null || args.Length < 2)
            {
                Message(arg, "Usage");
                return;
            }

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

            var target = FindPlayer(args[1]);
            if (target == null)
            {
                return;
            }

            switch (action)
            {
                case "reset":
                    ResetBlueprints(target);
                    break;
                
                case "unlock":
                    if (args.Length < 3)
                    {
                        Message(arg, "Usage");
                        return;
                    }

                    var itemID = ItemManager.FindItemDefinition(args[2])?.itemid ?? 0;
                    UnlockBlueprints(target, new List<int>{itemID});
                    break;
                
                case "unlockall":
                    UnlockBlueprints(target, data.allBlueprints);
                    break;
                
                default:
                    Message(arg, "Usage");
                    return;
            }
            
            Message(arg, "Success", target.displayName);
        }

        #endregion
        
        #region Configuration 1.1.2

        private static ConfigData config;

        private class ConfigData
        {
            [JsonProperty(PropertyName = "Blacklist")]
            public List<string> blacklist = new List<string>();
            
            [JsonProperty(PropertyName = "Default blueprints")]
            public List<string> defaultBlueprints = new List<string>();
        }

        private ConfigData GetDefaultConfig()
        {
            return new ConfigData
            {
                blacklist = new List<string>
                {
                    "shortname",
                    "shortname",
                    "shortname",
                },
                defaultBlueprints = new List<string>
                {
                   "shortname",
                   "shortname",
                   "shortname",
                }
            };
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();

            try
            {
                config = Config.ReadObject<ConfigData>();

                if (config == null)
                {
                    LoadDefaultConfig();
                }
            }
            catch
            {
                PrintError("Configuration file is corrupt! Check your config file at https://jsonlint.com/");
                
                timer.Every(10f, () =>
                {
                    PrintError("Configuration file is corrupt! Check your config file at https://jsonlint.com/");
                });
                LoadDefaultConfig();
                return;
            }

            SaveConfig();
        }

        protected override void LoadDefaultConfig()
        {
            config = GetDefaultConfig();
        }

        protected override void SaveConfig()
        {
            Config.WriteObject(config);
        }

        #endregion
        
        #region Localization 1.1.1
        
        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                {"Usage", "Usage:\n" +
                          " * blueprintmanager reset 'player name or id' - resets blueprints for player\n" +
                          " * blueprintmanager unlock 'player name or id' 'item shortname' - unlock specified blueprint for player\n" +
                          " * blueprintmanager unlockall 'player name or id'- unlocks all blueprints for player"},
                {"Permission", "You don't have permission to use that!"},
                
                {"No Players", "There are no players with that Name or steamID! ({0})"},
                {"Multiple Players", "There are many players with that Name:\n{0}"},
                {"Success", "Your action was done successfully for '{0}'!"}
            }, this);
        }
        
        private string GetMessage(string messageKey, string playerID, params object[] args)
        {
            return string.Format(lang.GetMessage(messageKey, this, playerID), args);
        }

        private void Message(ConsoleSystem.Arg arg, string messageKey, params object[] args)
        {
            var message = GetMessage(messageKey, null, args);
            var player = arg.Player();
            if (player != null)
            {
                player.ChatMessage(message);
            }
            else
            {
                SendReply(arg, message);
            }
        }

        #endregion
    }
}

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