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

FREE StackSizeManager : 1.0.0 1.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
// Reference: 0Harmony

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using Harmony;
using Newtonsoft.Json;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("StackSizeManager", "Strobez", "1.0.0")]
    internal class StackSizeManager : RustPlugin
    {
        #region Harmony
        private static HarmonyInstance? _harmonyInstance;

        private void OnServerInitialized()
        {
            try
            {
                _harmonyInstance = HarmonyInstance.Create(Name + "Patches");
                _harmonyInstance.PatchAll();
            }
            catch (Exception ex)
            {
                Debug.LogError($"Error creating Harmony instance: {ex}");
            }
        }

        private void Unload()
        {
            try
            {
                _harmonyInstance?.UnpatchAll(_harmonyInstance.Id);
            }
            catch (Exception ex)
            {
                Debug.LogError($"Error unpatching Harmony instance: {ex}");
            }
        }

        [HarmonyPatch(typeof(Bootstrap), "StartupShared")]
        private static class Bootstrap_StartupShared_Patch
        {
            [HarmonyPrefix]
            private static bool Prefix()
            {
                foreach (ItemDefinition itemDef in ItemManager.itemList)
                {
                    int stackable = itemDef.stackable;

                    if (config == null)
                    {
                        Debug.LogError("Configuration is null");
                        break;
                    }

                    if (config.InvididualStackSizes.TryGetValue(itemDef.shortname, out int individualStackSize))
                        itemDef.stackable = individualStackSize;

                    if (config.IndividualItemStackMultipliers.TryGetValue(itemDef.shortname, out int multiplier))
                        itemDef.stackable = Mathf.RoundToInt(stackable * multiplier);

                    if (config.CategoryStackMultipliers.TryGetValue(itemDef.category.ToString(), out int categoryMultiplier) && categoryMultiplier > 1.0f)
                        itemDef.stackable = Mathf.RoundToInt(stackable * categoryMultiplier);
                }

                return true;
            }

        }
        #endregion

        #region Configuration
        private static Configuration? config;

        public class Configuration
        {

            [JsonProperty("Individial Stack Sizes")]
            public Dictionary<string, int> InvididualStackSizes = new();
            
            [JsonProperty("Invdividual Item Stack Multipliers")]
            public Dictionary<string, int> IndividualItemStackMultipliers = new();
            
            [JsonProperty("Category Stack Multipliers")]
            public Dictionary<string, int> CategoryStackMultipliers = new();

            public string ToJson()
            {
                return JsonConvert.SerializeObject(this);
            }

            public Dictionary<string, object> ToDictionary()
            {
                return JsonConvert.DeserializeObject<Dictionary<string, object>>(ToJson());
            }
        }

        protected override void LoadDefaultConfig()
        {
            config = new Configuration();
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                config = Config.ReadObject<Configuration>();
                if (config == null) throw new JsonException();

                if (!config.ToDictionary().Keys.SequenceEqual(Config.ToDictionary(x => x.Key, x => x.Value).Keys))
                {
                    PrintWarning("Configuration appears to be outdated; updating and saving");
                    SaveConfig();
                }
            }
            catch
            {
                PrintWarning($"Configuration file {Name}.json is invalid; using defaults");
                LoadDefaultConfig();
            }
        }

        protected override void SaveConfig()
        {
            PrintWarning($"Configuration changes saved to {Name}.json");
            Config.WriteObject(config, true);
        }
        #endregion Configuration
    }
}

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