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

FREE NPCVendingManager : 2.0.4 2.0.4

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using Oxide.Core;
using UnityEngine;
using Newtonsoft.Json;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
using Newtonsoft.Json.Converters;
using Facepunch;
using VLB;

using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Oxide.Core.Configuration;

namespace Oxide.Plugins
{
    [Info("NPCVendingManager", "EcoSmile", "2.0.4")]
    class NPCVendingManager : RustPlugin
    {
        static NPCVendingManager ins;
        PluginConfig config;
        
        public class PluginConfig
        {
            [JsonProperty("Настройка торговых автоматов")]
            public Dictionary<string, Dictionary<string, VendinSetting>> Vending { get; set; }
        }

        public class VendinSetting
        {
            [JsonProperty("Время через которое будет выполняться завоз предметов (в секундах)")]
            public float refillTime;
            [JsonProperty("Настройка товаров")]
            public List<VendingOrder> orders;
        }
         
        public class VendingOrder
        {
            [JsonProperty("Добавить товар?")]
            public bool AddItem;
            [JsonProperty("Название покупаемого товара")]
            public string ItemToBuy { get; set; }
            [JsonProperty("Максимальный стак покупаемого предмета за один раз")]
            public int BuyngItemMaxAmount { get; set; }
            [JsonProperty("SKINID покупаемого предмета")]
            public ulong BuyngItemSkinID { get; set; }
            [JsonProperty("Количество покупаемого товара за раз")]
            public int BuyngItemAmount { get; set; }
            [JsonProperty("Покупаемый товар это чертёж")]
            public bool BuyngItemIsBP { get; set; }
            [JsonProperty("Название платёжного товара")]
            public string PayItemShortName { get; set; }
            [JsonProperty("Количество платёжного товара за раз")]
            public int PayItemAmount { get; set; }
            [JsonProperty("Платёжный товар это чертёж")]
            public bool PayItemIsBP { get; set; }
        }

        protected override void LoadDefaultConfig()
        {
            config = new PluginConfig
            {
                Vending = GetVendingList(),
            };
        }


        protected override void LoadConfig()
        {
            base.LoadConfig();
            config = Config.ReadObject<PluginConfig>();
            if (config.Vending.Count == 0)
            {
                LoadDefaultConfig();
                SaveConfig();
            }
        }

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

        private void OnServerInitialized()
        {
            ins = this;
            VendingInit();
        }

        void Unload()
        {
            foreach (var vending in BaseNetworkable.serverEntities.OfType<NPCVendingMachine>().Where(x => x != null && x.OwnerID == 0).ToList())
            {
                vending.InstallFromVendingOrders();
            }
        }

        public Dictionary<string, Dictionary<string, VendinSetting>> GetVendingList()
        {
            Dictionary<string, Dictionary<string, VendinSetting>> vendings = new Dictionary<string, Dictionary<string, VendinSetting>>();
            var vendingList = BaseNetworkable.serverEntities.OfType<NPCVendingMachine>().Where(x => x != null && x.OwnerID == 0).ToList();
            foreach (var vending in vendingList)
            {
                var shopName = vending.shopName;
                if (!vendings.ContainsKey(vending.ShortPrefabName) || !vendings[vending.ShortPrefabName].ContainsKey(shopName))
                {
                    if (!vendings.ContainsKey(vending.ShortPrefabName))
                        vendings.Add(vending.ShortPrefabName, new Dictionary<string, VendinSetting>());
                    vending.InstallFromVendingOrders();
                    if (!vendings[vending.ShortPrefabName].ContainsKey(shopName))
                    {
                        vendings[vending.ShortPrefabName].Add(shopName, new VendinSetting());
                        vendings[vending.ShortPrefabName][shopName].refillTime = 120;
                        vendings[vending.ShortPrefabName][shopName].orders = new List<VendingOrder>();

                        List<VendingOrder> orderlist = new List<VendingOrder>();
                        foreach (var item in vending.vendingOrders.orders)
                        {
                            VendingOrder order = new VendingOrder();
                            order.BuyngItemMaxAmount = 10;
                            order.ItemToBuy = item.sellItem.shortname;
                            order.BuyngItemAmount = item.sellItemAmount;
                            order.BuyngItemIsBP = item.sellItemAsBP;
                            order.PayItemShortName = item.currencyItem.shortname;
                            order.BuyngItemSkinID = 0;
                            order.PayItemAmount = item.currencyAmount;
                            order.PayItemIsBP = item.currencyAsBP;
                            order.AddItem = true;
                            orderlist.Add(order);
                        }
                        vendings[vending.ShortPrefabName][shopName].orders = orderlist;
                    }
                }

            }

            return vendings;
        }

        void VendingInit()
        {
            var vendingList = BaseNetworkable.serverEntities.OfType<NPCVendingMachine>().Where(x => x != null && x.OwnerID == 0).ToList();

            foreach (var vending in vendingList)
            {
                if (config.Vending.ContainsKey(vending.ShortPrefabName) && config.Vending[vending.ShortPrefabName].ContainsKey(vending.shopName))
                {
                    vending.CancelInvoke(vending.InstallFromVendingOrders);
                    vending.CancelInvoke(vending.Refill);
                    vending.ClearSellOrders();
                    vending.inventory.itemList.Clear();
                    foreach (var item in config.Vending[vending.ShortPrefabName][vending.shopName].orders)
                    {
                        if (!item.AddItem) continue;
                        ItemDefinition itemDefinition = ItemManager.FindItemDefinition(item.ItemToBuy);
                        if (itemDefinition == null)
                        {
                            PrintError($"ItemDefinition from BuyItem ShortName {item.ItemToBuy} not found.");
                            continue;
                        }
                        ItemDefinition x = ItemManager.FindItemDefinition(item.PayItemShortName);
                        if (x == null)
                        {
                            PrintError($"ItemDefinition from PayItem ShortName {item.PayItemAmount} not found.");
                            continue;
                        }
                        AddItemForSale(vending, itemDefinition.itemid, item.BuyngItemAmount, x.itemid, item.PayItemAmount, vending.GetBPState(item.BuyngItemIsBP, item.PayItemIsBP), item.BuyngItemMaxAmount, item.BuyngItemSkinID);
                    }

                    vending.InvokeRepeating(vending.Refill, config.Vending[vending.ShortPrefabName][vending.shopName].refillTime, config.Vending[vending.ShortPrefabName][vending.shopName].refillTime);
                }
            }
        }

        public void AddItemForSale(VendingMachine vending, int itemID, int amountToSell, int currencyID, int currencyPerTransaction, byte bpState, int maxByStack, ulong SkinID)
        {
            vending.AddSellOrder(itemID, amountToSell, currencyID, currencyPerTransaction, bpState);
            vending.transactionActive = true;
            if (bpState == 1 || bpState == 3)
            {
                for (int i = 0; i < maxByStack; i++)
                {
                    global::Item item = ItemManager.CreateByItemID(vending.blueprintBaseDef.itemid, 1, 0UL);
                    item.blueprintTarget = itemID;
                    vending.inventory.Insert(item);
                }
            }   
            else
            {
                var item = ItemManager.Create(ItemManager.FindItemDefinition(itemID), amountToSell * maxByStack, SkinID);
                item.MoveToContainer(vending.inventory);
                //vending.inventory.AddItem(ItemManager.FindItemDefinition(itemID), amountToSell * maxByStack, SkinID);
            }
            vending.transactionActive = false;
            vending.RefreshSellOrderStockLevel(null);
        }
    }
}

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