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

FREE BluePrinter : 1.0.7 1.0.7

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
/*
References:
 * System
 * Assembly-CSharp
 * Oxide.Core
 * Oxide.Ext.CSharp
 * OXide.Game.Rust
*/
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text.RegularExpressions;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Core.Libraries;
namespace Oxide.Plugins {
    [Info("BluePrinter", "mk_sky", "1.0.7", ResourceId = 1343)]
    [Description("Allows producing blueprints your char knows, needs paper or blueprintparts.")]
    class BluePrinter : RustPlugin {
#region vars
        ListDictionary<Rust.Rarity, int> paperNeeded;
        ListDictionary<Rust.Rarity, int> blueprintPartsNeeded;
        //ListDictionary<Rust.Rarity, string> blueprintPartsTypeNeeded;
        ListDictionary<Rust.Rarity, int> drawTimes;
        ListDictionary<Rust.Rarity, int> drawTimeModifier;
        //Dictionary<string, int> blueprintPartsID = new Dictionary<string, int>() {
        //    { "blueprint_fragment", 1351589500 },
        //    { "blueprint_page", 1625167035 },
        //    { "blueprint_book", 1624763669 },
        //    { "blueprint_library", -845335793 }
        //};
        ListDictionary<string, string> localization;
        ListDictionary<string, string> itemAlias;
        bool cancelBPWhenDead = true;
        bool paperUsageAllowed = true;
        bool blueprintPartsUsageAllowed = false;
        bool drawTimeModifierEnabled = false;
        bool mulitUseBPsAllowed = true;
        bool popupsEnabled = false;
        [PluginReference]
        Plugin PopupNotifications;
#endregion
        void OnServerInitialized() {
            ConfigLoader();
            if (!permission.PermissionExists("blueprinter.canuse")) permission.RegisterPermission("blueprinter.canuse", this);
            foreach (BasePlayer player in BasePlayer.sleepingPlayerList) if (Config["InDrawing"] != null && Config["InDrawing", player.userID.ToString()] != null && Config["InDrawing", player.userID.ToString()].ToString() != String.Empty) TimedBluePrint(player.userID.ToString());
            else Config["InDrawing", player.userID.ToString()] = "";
            foreach (BasePlayer player in BasePlayer.activePlayerList) if (Config["InDrawing"] != null && Config["InDrawing", player.userID.ToString()] != null && Config["InDrawing", player.userID.ToString()].ToString() != String.Empty) TimedBluePrint(player.userID.ToString());
            else Config["InDrawing", player.userID.ToString()] = "";
            SaveConfig();
        }
        protected override void LoadDefaultConfig() {
            if (Config.Exists()) Config.Clear();
            Config["Version"] = this.Version.ToString();
#region paper
            // just took required blueprint.fragment * 1.5 / 10 for standard, because we are all bad blueprint-drawers and it will already take a lot of wood with this
            // (1)paper = 100 wood (if not changed by other plugin) ; Common = 300 wood ; Uncommon = 4.5k wood ; Rare = 9k wood ; VeryRare = 18k wood
            Config["Paper", "Common"] = 3;
            Config["Paper", "Uncommon"] = 45;
            Config["Paper", "Rare"] = 90;
            Config["Paper", "VeryRare"] = 180;
            Config["Paper", "None"] = 1;
#endregion
#region blueprintparts
            Config["BlueprintParts", "Common"] = 2;
            //Config["BlueprintParts", "CommonType"] = "blueprint_fragment";
            Config["BlueprintParts", "Uncommon"] = 4;
            //Config["BlueprintParts", "UncommonType"] = "blueprint_page";
            Config["BlueprintParts", "Rare"] = 8;
            //Config["BlueprintParts", "RareType"] = "blueprint_book";
            Config["BlueprintParts", "VeryRare"] = 16;
            // Config["BlueprintParts", "VeryRareType"] = "blueprint_library";
            Config["BlueprintParts", "None"] = 1;
            //Config["BlueprintParts", "NoneType"] = "blueprint_fragment";
#endregion
#region drawtime
            Config["DrawTime", "Common"] = 10;
            Config["DrawTime", "Uncommon"] = 30;
            Config["DrawTime", "Rare"] = 60;
            Config["DrawTime", "VeryRare"] = 120;
            Config["DrawTime", "None"] = 0;
#endregion
#region drawtimemodifier
            Config["DrawTimeModifierMultiuse", "Common"] = 5;
            Config["DrawTimeModifierMultiuse", "Uncommon"] = 15;
            Config["DrawTimeModifierMultiuse", "Rare"] = 30;
            Config["DrawTimeModifierMultiuse", "VeryRare"] = 60;
            Config["DrawTimeModifierMultiuse", "None"] = 0;
#endregion
#region settings
            Config["Settings", "CancelBPWhenDead"] = true;
            Config["Settings", "PaperUsageAllowed"] = true;
            Config["Settings", "BlueprintPartsUsageAllowed"] = false;
            Config["Settings", "EnablePopups"] = false;
            Config["Settings", "EnableDrawTimeModifier"] = false;
            Config["Settings", "AllowMultiUseBPs"] = true;
#endregion
#region localization
            Config["Localization", "NotEnoughPaper"] = "The required ammount of paper to create this blueprint is {0} and you only have {1}.";
            Config["Localization", "NotEnoughBluePrintParts"] = "The required ammount of research paper to create this blueprint is {0} and you only have {1}.";
            Config["Localization", "BPNotLearned"] = "You don't know the blueprint for this item, learn it yourself first.";
            Config["Localization", "BPIsDrawing"] = "Blueprint is drawing now, please wait {0} seconds.";
            Config["Localization", "BPDelivery"] = "You finished drawing a blueprint for {0}.";
            Config["Localization", "BPRemovedFromQueue"] = "You are dead and can't finish drawing the blueprint for {0}.";
            Config["Localization", "AlreadyDrawing"] = "You are already drawing a blueprint, please wait until this is finished.";
            Config["Localization", "ItemNotFound"] = "An item with the name \"{0}\" was not found.";
            Config["Localization", "NoBP"] = "No blueprint for this item possible.";
            Config["Localization", "Help"] = "Use /blueprinter [ITEM] to create a blueprint from your known items.";
            Config["Localization", "NoPermission"] = "You have no permission to use this command.";
#endregion
#region itemalias
            foreach (ItemDefinition itemDef in ItemManager.itemList) if (ItemManager.FindBlueprint(itemDef) != null && !ItemManager.FindBlueprint(itemDef).defaultBlueprint) Config["ZItemAlias", itemDef.shortname] = itemDef.displayName.english;
            // only putting the Z here so it won't show before the other things in the config
            //Config["ZItemAlias", "blueprint_fragment"] = "Blueprint Fragment";
            //
            //Config["ZItemAlias", "blueprint_page"] = "Blueprint Page";
            //
            //Config["ZItemAlias", "blueprint_book"] = "Blueprint Book";
            //
            //Config["ZItemAlias", "blueprint_library"] = "Blueprint Library";
            Config["ZItemAlias", "researchpaper"] = "Research Paper";
#endregion
#region permission
            if (!permission.PermissionExists("blueprinter.canuse")) permission.RegisterPermission("blueprinter.canuse", this);
            if (!permission.GroupHasPermission("player", "blueprinter.canuse")) permission.GrantGroupPermission("player", "blueprinter.canuse", this);
            if (!permission.GroupHasPermission("moderator", "blueprinter.canuse")) permission.GrantGroupPermission("moderator", "blueprinter.canuse", this);
            if (!permission.GroupHasPermission("admin", "blueprinter.canuse")) permission.GrantGroupPermission("admin", "blueprinter.canuse", this);
#endregion
            SaveConfig();
            PrintWarning("Blueprinter created new config.");
        }
        void ConfigLoader() {
            base.LoadConfig();
#region updater
            if (Config.Exists() && Config["Version"] == null) {
                Config.Save(Config.Filename + ".pre103.bak");
                //will always call this pre103 as the change for this came with 1.0.3
                LoadDefaultConfig();
            }
            else if (Config.Exists() && Config["Version"].ToString() != this.Version.ToString()) ConfigUpdater();
#endregion
#region paper
            paperNeeded = new ListDictionary<Rust.Rarity, int>();
            paperNeeded.Add(Rust.Rarity.Common, Convert.ToInt32(Config["Paper", "Common"]));
            paperNeeded.Add(Rust.Rarity.Uncommon, Convert.ToInt32(Config["Paper", "Uncommon"]));
            paperNeeded.Add(Rust.Rarity.Rare, Convert.ToInt32(Config["Paper", "Rare"]));
            paperNeeded.Add(Rust.Rarity.VeryRare, Convert.ToInt32(Config["Paper", "VeryRare"]));
            paperNeeded.Add(Rust.Rarity.None, Convert.ToInt32(Config["Paper", "None"]));
#endregion
#region blueprintpartsneeded
            blueprintPartsNeeded = new ListDictionary<Rust.Rarity, int>();
            blueprintPartsNeeded.Add(Rust.Rarity.Common, Convert.ToInt32(Config["BlueprintParts", "Common"]));
            blueprintPartsNeeded.Add(Rust.Rarity.Uncommon, Convert.ToInt32(Config["BlueprintParts", "Uncommon"]));
            blueprintPartsNeeded.Add(Rust.Rarity.Rare, Convert.ToInt32(Config["BlueprintParts", "Rare"]));
            blueprintPartsNeeded.Add(Rust.Rarity.VeryRare, Convert.ToInt32(Config["BlueprintParts", "VeryRare"]));
            blueprintPartsNeeded.Add(Rust.Rarity.None, Convert.ToInt32(Config["BlueprintParts", "None"]));
#endregion
#region blueprintpartstype
            //blueprintPartsTypeNeeded = new ListDictionary<Rust.Rarity, string>();
            //
            //blueprintPartsTypeNeeded.Add(Rust.Rarity.Common, Config["BlueprintParts", "CommonType"].ToString());
            //
            //blueprintPartsTypeNeeded.Add(Rust.Rarity.Uncommon, Config["BlueprintParts", "UncommonType"].ToString());
            //
            //blueprintPartsTypeNeeded.Add(Rust.Rarity.Rare, Config["BlueprintParts", "RareType"].ToString());
            //
            //blueprintPartsTypeNeeded.Add(Rust.Rarity.VeryRare, Config["BlueprintParts", "VeryRareType"].ToString());
            //
            //blueprintPartsTypeNeeded.Add(Rust.Rarity.None, Config["BlueprintParts", "NoneType"].ToString());
#endregion
#region localization
            localization = new ListDictionary<string, string>();
            localization.Add("NotEnoughPaper", Config["Localization", "NotEnoughPaper"].ToString());
            localization.Add("NotEnoughBluePrintParts", Config["Localization", "NotEnoughBluePrintParts"].ToString());
            localization.Add("BPNotLearned", Config["Localization", "BPNotLearned"].ToString());
            localization.Add("BPIsDrawing", Config["Localization", "BPIsDrawing"].ToString());
            localization.Add("BPDelivery", Config["Localization", "BPDelivery"].ToString());
            localization.Add("AlreadyDrawing", Config["Localization", "AlreadyDrawing"].ToString());
            localization.Add("ItemNotFound", Config["Localization", "ItemNotFound"].ToString());
            localization.Add("NoBP", Config["Localization", "NoBP"].ToString());
            localization.Add("Help", Config["Localization", "Help"].ToString());
            localization.Add("NoPermission", Config["Localization", "NoPermission"].ToString());
#endregion
#region itemalias & newitems
            itemAlias = new ListDictionary<string, string>();
            bool newItems = false;
            foreach (ItemDefinition itemDef in ItemManager.itemList) if (ItemManager.FindBlueprint(itemDef) != null) if (Config["ZItemAlias", itemDef.shortname] != null) itemAlias.Add(itemDef.shortname, Config["ZItemAlias", itemDef.shortname].ToString());
            else {
                Config["ZItemAlias", itemDef.shortname] = itemDef.displayName.english;
                newItems = true;
            }
            //itemAlias.Add("blueprint_fragment", Config["ZItemAlias", "blueprint_fragment"].ToString().ToLower());
            //
            //itemAlias.Add("blueprint_page", Config["ZItemAlias", "blueprint_page"].ToString().ToLower());
            //
            //itemAlias.Add("blueprint_book", Config["ZItemAlias", "blueprint_book"].ToString().ToLower());
            //
            //itemAlias.Add("blueprint_library", Config["ZItemAlias", "blueprint_library"].ToString().ToLower());
            itemAlias.Add("researchpaper", Config["ZItemAlias", "researchpaper"].ToString().ToLower());
            if (newItems) {
                PrintWarning("Config-loader added new items to config.");
                SaveConfig();
            }
#endregion
#region drawtimes
            drawTimes = new ListDictionary<Rust.Rarity, int>();
            drawTimes.Add(Rust.Rarity.Common, Convert.ToInt32(Config["DrawTime", "Common"]));
            drawTimes.Add(Rust.Rarity.Uncommon, Convert.ToInt32(Config["DrawTime", "Uncommon"]));
            drawTimes.Add(Rust.Rarity.Rare, Convert.ToInt32(Config["DrawTime", "Rare"]));
            drawTimes.Add(Rust.Rarity.VeryRare, Convert.ToInt32(Config["DrawTime", "VeryRare"]));
            drawTimes.Add(Rust.Rarity.None, Convert.ToInt32(Config["DrawTime", "None"]));
#endregion
#region drawusages
            drawTimeModifier = new ListDictionary<Rust.Rarity, int>();
            drawTimeModifier.Add(Rust.Rarity.Common, Convert.ToInt32(Config["DrawTimeModifierMultiuse", "Common"]));
            drawTimeModifier.Add(Rust.Rarity.Uncommon, Convert.ToInt32(Config["DrawTimeModifierMultiuse", "Uncommon"]));
            drawTimeModifier.Add(Rust.Rarity.Rare, Convert.ToInt32(Config["DrawTimeModifierMultiuse", "Rare"]));
            drawTimeModifier.Add(Rust.Rarity.VeryRare, Convert.ToInt32(Config["DrawTimeModifierMultiuse", "VeryRare"]));
            drawTimeModifier.Add(Rust.Rarity.None, Convert.ToInt32(Config["DrawTimeModifierMultiuse", "None"]));
#endregion
#region settings
            cancelBPWhenDead = Convert.ToBoolean(Config["Settings", "CancelBPWhenDead"]);
            paperUsageAllowed = Convert.ToBoolean(Config["Settings", "PaperUsageAllowed"]);
            blueprintPartsUsageAllowed = Convert.ToBoolean(Config["Settings", "BlueprintPartsUsageAllowed"]);
            drawTimeModifierEnabled = Convert.ToBoolean(Config["Settings", "EnableDrawTimeModifier"]);
            mulitUseBPsAllowed = Convert.ToBoolean(Config["Settings", "AllowMultiUseBPs"]);
            if (!paperUsageAllowed && !blueprintPartsUsageAllowed) {
                paperUsageAllowed = true;
                PrintError("Config-Loader reports that neither paperUsage nor blueprintPartsUsage is allowed.PaperUsage will be allowed by default then.");
            }
            if (PopupNotifications == null && Convert.ToBoolean(Config["Settings", "EnablePopups"])) PrintError("PopupNotifications-Plugin missing, can't enable pop-ups.Get the plugin first: http://oxidemod.org/plugins/popup-notifications.1252/");
            else if (PopupNotifications != null && Convert.ToBoolean(Config["Settings", "EnablePopups"])) popupsEnabled = true;
#endregion
            //Puts("Blueprinter loaded config.");
        }
        void ConfigUpdater() {
            PrintWarning(String.Format("Blueprinter updates config from v{0} to v{1}.", Config["Version"].ToString(), this.Version.ToString()));
            while (Config["Version"].ToString() != this.Version.ToString()) switch (Config["Version"].ToString()) {
#region 1.0.3 || 1.0.4 => 1.0.5
                case "1.0.3" : case "1.0.4" : Config["Settings", "DrawTime"] = null;
                Config["Settings", "EnablePopups"] = false;
                Config["DrawTime", "Common"] = 10;
                Config["DrawTime", "Uncommon"] = 30;
                Config["DrawTime", "Rare"] = 60;
                Config["DrawTime", "VeryRare"] = 120;
                Config["DrawTime", "None"] = 0;
                Config["Localization", "NoPermission"] = "You have no permission to use this command.";
                if (!permission.PermissionExists("blueprinter.canuse")) permission.RegisterPermission("blueprinter.canuse", this);
                if (!permission.GroupHasPermission("player", "blueprinter.canuse")) permission.GrantGroupPermission("player", "blueprinter.canuse", this);
                if (!permission.GroupHasPermission("moderator", "blueprinter.canuse")) permission.GrantGroupPermission("moderator", "blueprinter.canuse", this);
                if (!permission.GroupHasPermission("admin", "blueprinter.canuse")) permission.GrantGroupPermission("admin", "blueprinter.canuse", this);
                Config["Version"] = "1.0.5";
                break;
#endregion
#region 1.0.5 => 1.0.6
                case "1.0.5" : if (permission.PermissionExists("canuseblueprinter")) {
                    string[] playersWithPermission = permission.GetPermissionUsers("canuseblueprinter");
                    foreach (string s in playersWithPermission) if (permission.UserHasPermission(s.Substring(0, s.IndexOf('(')), "canuseblueprinter")) {
                        permission.RevokeUserPermission(s.Substring(0, s.IndexOf('(')), "canuseblueprinter");
                        permission.GrantUserPermission(s.Substring(0, s.IndexOf('(')), "blueprinter.canuse", this);
                    }
                    string[] groupsWithPermission = permission.GetPermissionGroups("canuseblueprinter");
                    foreach (string s in groupsWithPermission) if (permission.GroupHasPermission(s, "canuseblueprinter")) {
                        permission.RevokeGroupPermission(s, "canuseblueprinter");
                        permission.GrantGroupPermission(s, "blueprinter.canuse", this);
                    }
                    permission.RemoveGroup("canuseblueprinter");
                }
                Config["Settings", "EnablePopups"] = null;
                Config["Settings", "EnableDrawTimeModifier"] = false;
                Config["Settings", "AllowMultiUseBPs"] = true;
                Config["DrawTimeModifierMultiuse", "Common"] = 5;
                Config["DrawTimeModifierMultiuse", "Uncommon"] = 15;
                Config["DrawTimeModifierMultiuse", "Rare"] = 30;
                Config["DrawTimeModifierMultiuse", "VeryRare"] = 60;
                Config["DrawTimeModifierMultiuse", "None"] = 0;
                Config["Version"] = "1.0.6";
                break;
#endregion
#region 1.0.6 => 1.0.7
                case "1.0.6" : Config["Settings", "EnablePopups"] = false;
                Config["BlueprintParts", "Common"] = 2;
                Config["BlueprintParts", "Uncommon"] = 4;
                Config["BlueprintParts", "Rare"] = 8;
                Config["BlueprintParts", "VeryRare"] = 16;
                Config["BlueprintParts", "None"] = 1;
                Config["BlueprintParts", "CommonType"] = null;
                Config["BlueprintParts", "UncommonType"] = null;
                Config["BlueprintParts", "RareType"] = null;
                Config["BlueprintParts", "VeryRareType"] = null;
                Config["BlueprintParts", "NoneType"] = null;
                Config["Localization", "NotEnoughBluePrintParts"] = "The required ammount of research paper to create this blueprint is {0} and you only have {1}.";
                Config["ZItemAlias", "blueprint_fragment"] = null;
                Config["ZItemAlias", "blueprint_page"] = null;
                Config["ZItemAlias", "blueprint_book"] = null;
                Config["ZItemAlias", "blueprint_library"] = null;
                Config["ZItemAlias", "researchpaper"] = "Research Paper";
                Config["Version"] = "1.0.7";
                break;
#endregion
            }
            SaveConfig();
        }
        [ConsoleCommand("blueconf.recreate")]
        void ConsoleCommandConfigRecreate() {
            LoadDefaultConfig();
            ConfigLoader();
        }
        [ConsoleCommand("blueconf.load")]
        void ConsoleCommandConfigLoad() {
            ConfigLoader();
        }
        [ConsoleCommand("blueconf.set")]
        void ConsoleCommandConfigSet(ConsoleSystem.Arg arg) {
            if (IsUInt(arg.GetString(2))) Config[arg.GetString(0), arg.GetString(1)] = arg.GetUInt(2);
            else if (arg.GetString(2) == "true" || arg.GetString(2) == "false") Config[arg.GetString(0), arg.GetString(1)] = arg.GetBool(2);
            else Config[arg.GetString(0), arg.GetString(1)] = arg.GetString(2);
            SaveConfig();
            ConfigLoader();
        }
        [ChatCommand("bluehelp")]
        void ChatCommandHelp(BasePlayer player) {
            if (!popupsEnabled) SendReply(player, localization["Help"]);
            else PopupNotifications.Call("CreatePopupNotification", localization["Help"].Replace("\"", "'"), player);
        }
        [ChatCommand("blueprinter")]
        void ChatCommandBluePrinter(BasePlayer player, string command, string[] args) {
#region permission check
            if (!permission.UserHasPermission(player.UserIDString, "blueprinter.canuse")) {
                if (!popupsEnabled) SendReply(player, localization["NoPermission"]);
                else PopupNotifications.Call("CreatePopupNotification", localization["NoPermission"].Replace("\"", "'"), player, 10.0);
                return;
            }
#endregion
#region check if player already is drawing
            if (Config["InDrawing"] != null && Config["InDrawing", player.userID.ToString()] != null && Config["InDrawing", player.userID.ToString()].ToString() != String.Empty) {
                if (!popupsEnabled) SendReply(player, localization["AlreadyDrawing"]);
                else PopupNotifications.Call("CreatePopupNotification", localization["AlreadyDrawing"].Replace("\"", "'"), player, 10.0);
                return;
            }
#endregion
#region check length of arguments + draw usage nums
            int usageNums = 1;
            if (args.Length >= 2) {
                if (IsUInt(args[0]) && mulitUseBPsAllowed) {
                    usageNums = Convert.ToInt32(args[0]);
                    args[0] = "";
                }
                args = new string[1] {
                    String.Join(" ", args).Trim()
                }
                ;
            }
            else if (args.Length == 0) {
                ChatCommandHelp(player);
                return;
            }
#endregion
#region the logic...foreach (ItemBlueprint bp in ItemManager.GetBlueprints())
            if (itemAlias.Contains(bp.targetItem.shortname) && itemAlias[bp.targetItem.shortname].ToLower() == args[0].ToLower() || bp.targetItem.displayName.english.ToLower() == args[0].ToLower() || bp.targetItem.displayName.translated.ToLower() == args[0].ToLower()) {
                if (player.blueprints.CanCraft(bp.targetItem.itemid, 0)) {
                    if (paperUsageAllowed && player.inventory.FindItemID(106434956) != null && player.inventory.FindItemID(106434956).amount >= paperNeeded[bp.rarity] * usageNums ||  // 106434956 = paper
                    blueprintPartsUsageAllowed && player.inventory.FindItemID(540154065) != null && player.inventory.FindItemID(540154065).amount >= blueprintPartsNeeded[bp.rarity] * usageNums)  // 540154065 = research paper
                    {
#region what to take from player for the draw (if he has enough already got cleared in the above 'if')
                        if (paperUsageAllowed && player.inventory.FindItemID(106434956) != null && player.inventory.FindItemID(106434956).amount > paperNeeded[bp.rarity] * usageNums) player.inventory.FindItemID(106434956).amount -= paperNeeded[bp.rarity] * usageNums;
                        else if (paperUsageAllowed && player.inventory.FindItemID(106434956) != null && player.inventory.FindItemID(106434956).amount == paperNeeded[bp.rarity] * usageNums) player.inventory.FindItemID(106434956).RemoveFromContainer();
                        else {
                            if (player.inventory.FindItemID(540154065).amount == blueprintPartsNeeded[bp.rarity] * usageNums) player.inventory.FindItemID(540154065).RemoveFromContainer();
                            else player.inventory.FindItemID(540154065).amount -= blueprintPartsNeeded[bp.rarity] * usageNums;
                        }
                        player.inventory.SendUpdatedInventory(PlayerInventory.Type.Main, player.inventory.containerMain);
                        player.inventory.SendUpdatedInventory(PlayerInventory.Type.Belt, player.inventory.containerBelt);
#endregion
                        if (drawTimes[bp.rarity] != 0) {
#region timed stuff
                            if (!popupsEnabled) SendReply(player, String.Format(localization["BPIsDrawing"], (drawTimes[bp.rarity] + (drawTimeModifierEnabled ? (usageNums - 1) * drawTimeModifier[bp.rarity] : 0)).ToString()));
                            else PopupNotifications.Call("CreatePopupNotification", String.Format(localization["BPIsDrawing"], drawTimes[bp.rarity].ToString()).Replace("\"", "'"), player, 10.0);
                            Config["InDrawing", player.UserIDString] = bp.targetItem.itemid + "x" + usageNums.ToString();
                            SaveConfig();
                            Action timed = new Action(() => TimedBluePrint(player.userID.ToString()));
                            timer.In(drawTimes[bp.rarity] + (drawTimeModifierEnabled ? (usageNums - 1) * drawTimeModifier[bp.rarity] : 0), timed);
#endregion
                        }
                        else {
#region untimed stuff
                            Item item = ItemManager.Create(ItemManager.FindItemDefinition(-1887162396));
                            //bp base == -1887162396
                            item.blueprintTarget = bp.targetItem.itemid;
                            item.blueprintAmount = usageNums;
                            player.GiveItem(item);
#endregion
                        }
                    }
                    else {
#region dude get (more) stuff to draw on
                        if (paperUsageAllowed) {
                            if (!popupsEnabled) SendReply(player, String.Format(localization["NotEnoughPaper"], (paperNeeded[bp.rarity] * usageNums).ToString(), player.inventory.FindItemID(106434956) != null ? player.inventory.FindItemID(106434956).amount.ToString() : "0"));
                            else PopupNotifications.Call("CreatePopupNotification", String.Format(localization["NotEnoughPaper"], paperNeeded[bp.rarity].ToString(), player.inventory.FindItemID(106434956) != null ? player.inventory.FindItemID(106434956).amount.ToString() : "0").Replace("\"", "'"), player, 10.0);
                        }
                        if (blueprintPartsUsageAllowed) {
                            if (!popupsEnabled) SendReply(player, String.Format(localization["NotEnoughBluePrintParts"], blueprintPartsNeeded[bp.targetItem.rarity].ToString(), player.inventory.FindItemID(540154065) != null ? player.inventory.FindItemID(540154065).amount.ToString() : "0"));
                            else PopupNotifications.Call("CreatePopupNotification", String.Format(localization["NotEnoughBluePrintParts"], blueprintPartsNeeded[bp.targetItem.rarity].ToString(), player.inventory.FindItemID(540154065) != null ? player.inventory.FindItemID(540154065).amount.ToString() : "0").Replace("\"", "'"), player, 10.0);
                        }
#endregion
                    }
                }
                else if (!popupsEnabled) SendReply(player, localization["BPNotLearned"]);
                else PopupNotifications.Call("CreatePopupNotification", localization["BPNotLearned"].Replace("\"", "'"), player, 10.0);
                return;
            }
            if (!popupsEnabled) SendReply(player, String.Format(localization["ItemNotFound"], args[0]));
            else PopupNotifications.Call("CreatePopupNotification", String.Format(localization["ItemNotFound"], args[0]).Replace("\"", "'"), player, 10.0);
#endregion
        }
        [ChatCommand("debug")]
        void ChatCommandDebug(BasePlayer player) {
            SendReply(player, player.inventory.containerMain.GetSlot(0).info.displayName.english + " " + player.inventory.containerMain.GetSlot(0).info.shortname + " " + player.inventory.containerMain.GetSlot(0).info.itemid.ToString());
        }
        void OnEntityDeath(BaseCombatEntity entity, HitInfo hitInfo) {
            if (hitInfo == null || hitInfo.Initiator == null || hitInfo.Initiator.ToPlayer() == null) return;
            BasePlayer player = hitInfo.Initiator.ToPlayer();
            if (player.userID != null && Config["InDrawing"] != null && Config["InDrawing", player.userID.ToString()] != null && Config["InDrawing", player.userID.ToString()].ToString() != String.Empty && cancelBPWhenDead) {
                Config["InDrawing", player.userID.ToString()] = "";
                SaveConfig();
            }
        }
        void TimedBluePrint(string playerID) {
            BasePlayer player = BasePlayer.FindByID(Convert.ToUInt64(playerID));
            if (Config["InDrawing"] == null || Config["InDrawing", player.userID.ToString()] == null || Config["InDrawing", player.userID.ToString()].ToString() == String.Empty) return;
            Item item = ItemManager.Create(ItemManager.FindItemDefinition(-1887162396));
            //bp base == -1887162396
            item.blueprintTarget = Convert.ToInt32(Config["InDrawing", playerID].ToString().Substring(0, Config["InDrawing", playerID].ToString().LastIndexOf('x')));
            item.blueprintAmount = Convert.ToInt32(Config["InDrawing", playerID].ToString().Substring(Config["InDrawing", playerID].ToString().IndexOf('x') + 1));
            ;
            if (player == null) {
                PrintError(String.Format("Timed blueprint \"{0}\" could not be delivered, player \"{1}\" not found.", itemAlias.Contains(item.blueprintTargetDef.shortname) && itemAlias[item.blueprintTargetDef.shortname] != "" ? itemAlias[item.blueprintTargetDef.shortname] : item.blueprintTargetDef.displayName.english, playerID));
                Config["FailedDelivery", playerID] = (Config["FailedDelivery", playerID].ToString() != String.Empty ? Config["FailedDelivery", playerID].ToString() + "," : "") + Config["InDrawing", playerID].ToString();
                Config["InDrawing", playerID] = "";
                SaveConfig();
                return;
            }
            else if (player.IsDead() && !cancelBPWhenDead) {
                PrintWarning(String.Format("Player \"{0}\" is dead, delivery for blueprint ({1}) will be postponed by 30 seconds.", playerID, itemAlias.Contains(item.blueprintTargetDef.shortname) && itemAlias[item.blueprintTargetDef.shortname] != "" ? itemAlias[item.blueprintTargetDef.shortname] : item.blueprintTargetDef.displayName.english));
                Action timed = new Action(() => TimedBluePrint(player.userID.ToString()));
                timer.In(30, timed);
                return;
            }
            else if (!player.IsSleeping()) if (!popupsEnabled) SendReply(player, String.Format(localization["BPDelivery"], itemAlias.Contains(item.blueprintTargetDef.shortname) && itemAlias[item.blueprintTargetDef.shortname] != "" ? itemAlias[item.blueprintTargetDef.shortname] : item.blueprintTargetDef.displayName.english));
            else PopupNotifications.Call("CreatePopupNotification", String.Format(localization["BPDelivery"], itemAlias.Contains(item.blueprintTargetDef.shortname) && itemAlias[item.blueprintTargetDef.shortname] != "" ? itemAlias[item.blueprintTargetDef.shortname] : item.blueprintTargetDef.displayName.english).Replace("\"", "'"), player, 10.0);
            Config["InDrawing", playerID] = "";
            SaveConfig();
            player.GiveItem(item);
        }
        static bool IsUInt(string s) {
            Regex _uint = new Regex("^\\d*$");
            return _uint.Match(s).Success;
        }
    }
}

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