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

FREE CraftSystem : 1.1.0 1.1.0

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using UnityEngine;
namespace Oxide.Plugins
{
    [Info("CraftSystem", "wazzzup", "1.1.0")]
    [Description("CraftSystem")]
    public class CraftSystem : RustPlugin
    {
        ConfigData configData;
        class ConfigData
        {
            [JsonProperty("общий множитель рейта на крафт 0.0 - 1.0 или более общего времени крафта любого предмета")]
            public float overallRateInPersent = 1.0f;
            [JsonProperty("запретить крафтить, если инвентарь полный")]
            public bool denyOnFullInv = false;
            [JsonProperty("сообщать игроку что инвентарь полный при запрете крафта")]
            public bool messageOnFullInv = true;
            [JsonProperty("включить инстакрафт, если время крафта выставлено в 0")]
            public bool instaCraft = false;
            [JsonProperty("стандартное время время крафта в секундах")]
            public Dictionary<string, float> defaultRates = new Dictionary<string, float>();
            [JsonProperty("индивидуальное время крафта в секундах для предметов, если задано для предмета, игнорится общий рейт")]
            public Dictionary<string, float> myRates = new Dictionary<string, float>();
        }
        protected override void LoadDefaultConfig()
        {
            configData = new ConfigData();
            SaveConfig(configData);
        }
        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                { "invFull", "Your inventory is full u cannot craft" },
            }, this);
            lang.RegisterMessages(new Dictionary<string, string>
            {
                { "invFull", "В твоём инвентаре недостаточно места для крафта" },
            }, this, "ru");
        }

        void SaveConfig(ConfigData config) => Config.WriteObject(config, true);

        void Init()
        {
            configData = Config.ReadObject<ConfigData>();
            SaveConfig(configData);
            if (!(configData.denyOnFullInv || configData.instaCraft)) Unsubscribe(nameof(OnItemCraft));
        }
        void OnNewSave()
        {
            configData.defaultRates.Clear();
            SaveConfig(configData);
        }

        void OnServerInitialized()
        {
            var mcITEMS = ItemManager.itemList.ToDictionary(i => i.shortname);
            foreach (var definition in mcITEMS)
            {
                if (definition.Value.Blueprint == null)
                {
                    continue;
                }

                if (!configData.defaultRates.ContainsKey(definition.Key))
                {
                    configData.defaultRates.Add(definition.Key,definition.Value.Blueprint.time);
                }
                if (configData.myRates.ContainsKey(definition.Key))
                {
                    definition.Value.Blueprint.time = configData.myRates[definition.Key];
                }
                else if (configData.overallRateInPersent!=1.0)
                {
                    definition.Value.Blueprint.time = configData.defaultRates[definition.Key] * configData.overallRateInPersent;
                }
            }
            SaveConfig(configData);
        }
        private object OnItemCraft(ItemCraftTask task, BasePlayer crafter)
        {
            int amount = task.amount;
            int stackable = task.blueprint.targetItem.stackable;
            int final_amount = task.blueprint.amountToCreate * amount;
            int total_stacks =  (int)Math.Ceiling((float)final_amount /stackable);
            int invSlots = 30 -crafter.inventory.containerMain.itemList.Count - crafter.inventory.containerBelt.itemList.Count;
            if (invSlots < total_stacks)
            {
                if (configData.messageOnFullInv) SendReply(crafter, lang.GetMessage("invFull", this, crafter.UserIDString));
                foreach (Item takenItem in task.takenItems)
                {
                    if (takenItem != null && takenItem.amount > 0)
                    {
                        if (takenItem.amount > 0 && !takenItem.MoveToContainer(task.owner.inventory.containerMain, -1, true))
                        {
                            takenItem.Drop(crafter.inventory.containerMain.dropPosition + UnityEngine.Random.value * Vector3.down + UnityEngine.Random.insideUnitSphere, crafter.inventory.containerMain.dropVelocity, new Quaternion());
                        }
                    }
                }
                return false;
            }
            if (configData.instaCraft)
            {
                if (total_stacks == 1)
                {
                    Item item = ItemManager.CreateByItemID(task.blueprint.targetItem.itemid, final_amount, (ulong)task.skinID);
                    if (item != null) crafter.GiveItem(item);                }
                else
                {
                    for (int i = 1; i <= total_stacks; i++)
                    {
                        int am = final_amount < stackable ? final_amount : stackable;
                        final_amount -= stackable;
                        Item item = ItemManager.CreateByItemID(task.blueprint.targetItem.itemid, am, (ulong)task.skinID);
                        if (item != null) crafter.GiveItem(item);
                    }
                }
                return false;
            }
            return null;
        }
    }
}

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