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

FREE FNpcVendingLoot : 1.0.0 1.0.0

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

namespace Oxide.Plugins
{
    [Info("FNpcVendingLoot", "fufeldev", "1.0.0")]
    public class FNpcVendingLoot : RustPlugin
    {
        private const int StockTransactions = 10;

        private class VendingOrder
        {
            public string SellItem;
            public int SellAmount;
            public int ScrapPrice;
        }

        private readonly List<VendingOrder> _orders = new List<VendingOrder>
        {
            new VendingOrder { SellItem = "lowgradefuel", SellAmount = 500, ScrapPrice = 500 },
            new VendingOrder { SellItem = "cloth", SellAmount = 1000, ScrapPrice = 700 },
            new VendingOrder { SellItem = "leather", SellAmount = 500, ScrapPrice = 500 },
            new VendingOrder { SellItem = "metal.fragments", SellAmount = 5000, ScrapPrice = 500 },
            new VendingOrder { SellItem = "rope", SellAmount = 10, ScrapPrice = 60 },
            new VendingOrder { SellItem = "sewingkit", SellAmount = 10, ScrapPrice = 120 },
            new VendingOrder { SellItem = "gears", SellAmount = 10, ScrapPrice = 550 },
            new VendingOrder { SellItem = "riflebody", SellAmount = 10, ScrapPrice = 600 },
            new VendingOrder { SellItem = "chainsaw", SellAmount = 1, ScrapPrice = 150 },
            new VendingOrder { SellItem = "jackhammer", SellAmount = 1, ScrapPrice = 150 }
        };

        private void OnServerInitialized()
        {
            NextTick(ApplyAll);
            timer.Every(30f, ApplyAll);
        }

        private void OnEntitySpawned(NPCVendingMachine vending)
        {
            if (vending is InvisibleVendingMachine) return;
            NextTick(() => ApplyVending(vending));
        }

        private void OnVendingTransaction(VendingMachine vending, BasePlayer buyer, int sellOrderId, int numberOfTransactions, ItemContainer targetContainer)
        {
            var npcVending = vending as NPCVendingMachine;
            if (npcVending == null) return;
            if (npcVending is InvisibleVendingMachine) return;
            NextTick(() => ApplyVending(npcVending));
        }

        private void ApplyAll()
        {
            foreach (var vending in BaseNetworkable.serverEntities.OfType<NPCVendingMachine>())
            {
                if (vending is InvisibleVendingMachine) continue;
                ApplyVending(vending);
            }
        }

        private void ApplyVending(NPCVendingMachine vending)
        {
            if (vending == null || vending.IsDestroyed) return;
            if (vending is InvisibleVendingMachine) return;
            if (vending.sellOrders == null || vending.sellOrders.sellOrders == null)
                vending.InstallDefaultSellOrders();
            vending.CancelInvoke(vending.InstallFromVendingOrders);
            vending.CancelInvoke(vending.Refill);
            vending.ClearSellOrders();
            vending.inventory.Clear();
            vending.inventory.capacity = 128;
            ItemManager.DoRemoves();
            foreach (var order in _orders)
                AddOrder(vending, order);
            vending.RefreshSellOrderStockLevel();
            vending.SendSellOrders();
            vending.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        }

        private void AddOrder(NPCVendingMachine vending, VendingOrder order)
        {
            var sellDefinition = ItemManager.FindItemDefinition(order.SellItem);
            var scrapDefinition = ItemManager.FindItemDefinition("scrap");
            if (sellDefinition == null || scrapDefinition == null) return;
            var sellOrder = new ProtoBuf.VendingMachine.SellOrder();
            sellOrder.ShouldPool = false;
            sellOrder.itemToSellID = sellDefinition.itemid;
            sellOrder.itemToSellAmount = order.SellAmount;
            sellOrder.currencyID = scrapDefinition.itemid;
            sellOrder.currencyAmountPerItem = order.ScrapPrice;
            sellOrder.currencyIsBP = false;
            sellOrder.itemToSellIsBP = false;
            sellOrder.priceMultiplier = 1f;
            sellOrder.receivedQuantityMultiplier = 1f;
            vending.sellOrders.sellOrders.Add(sellOrder);
            vending.transactionActive = true;
            vending.inventory.AddItem(sellDefinition, order.SellAmount * StockTransactions, 0UL, ItemContainer.LimitStack.All);
            vending.transactionActive = false;
        }
    }
}

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