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

FREE BuildingHealth : 1.0.7 1.0.7

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using Newtonsoft.Json;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("Building Health", "Orange", "1.0.7")]
    [Description("Allows you to change the maximum health of buildings")]
    public class BuildingHealth : RustPlugin
    {
        #region Vars

        private Dictionary<uint, float> data = new Dictionary<uint, float>();
        private List<string> changed = new List<string>();

        #endregion
        
        #region Oxide Hooks

        private void OnServerInitialized()
        {
            Update(false);
        }

        private void Unload()
        {
            Update(true);
        }
        
        private void OnEntityBuilt(Planner plan, GameObject go)
        {
            CheckEntity(go.ToBaseEntity());
        }

        #endregion

        #region Helpers

        private void Update(bool unload)
        {
            UpdateDB();
            ResetMultiplier(unload);
            ResetHP();
        }

        private void CheckEntity(BaseEntity entity)
        {
            if (entity == null) {return;}
            var name = entity.ShortPrefabName;
            if (changed.Contains(name)) {return;}
            if (!config.percents.ContainsKey(name)) {return;}
            var block = entity.GetComponent<BuildingBlock>();
            if (block == null) {return;}
            var hp = block.health / block.MaxHealth();
            block.blockDefinition.healthMultiplier = config.percents[name] / 100f;
            block.health = hp * block.MaxHealth();
            changed.Add(name);
        }

        private void UpdateDB()
        {
            data.Clear();
            
            foreach (var block in UnityEngine.Object.FindObjectsOfType<BuildingBlock>())
            {
                var id = block.net.ID;
                var hp = block.health / block.MaxHealth();
                data.TryAdd(id, hp);
            }
        }
        
        private void ResetHP()
        {
            foreach (var block in UnityEngine.Object.FindObjectsOfType<BuildingBlock>())
            {
                var id = block.net.ID;
                if(!data.ContainsKey(id)) {return;}
                block.health = data[id] * block.MaxHealth();
            }
        }

        private void ResetMultiplier(bool reset = false)
        {
            foreach (var block in UnityEngine.Object.FindObjectsOfType<BuildingBlock>())
            {
                var name = block.ShortPrefabName;
                var multiplier = reset ? 1f : config.percents[block.ShortPrefabName] /100f;
                block.blockDefinition.healthMultiplier = multiplier;
                if (!changed.Contains(name)) {changed.Add(name);}
            }
        }

        #endregion
        
        #region Config
        
        private ConfigData config;
        
        private class ConfigData
        {    
            [JsonProperty(PropertyName = "Building health in percents")]
            public Dictionary<string, int> percents;
        }
        
        private ConfigData GetDefaultConfig()
        {
            return new ConfigData
            {
                percents = new Dictionary<string, int>
                {
                    {"roof", 100},
                    {"block.stair.ushape", 100},
                    {"block.stair.lshape", 100},
                    {"wall.low", 100},
                    {"wall.half", 100},
                    {"wall.frame", 100},
                    {"wall.window", 100},
                    {"wall.doorway", 100},
                    {"wall", 100},
                    {"floor", 100},
                    {"floor.triangle", 100},
                    {"floor.frame", 100},
                    {"foundation.steps", 100},
                    {"foundation.triangle", 100},
                    {"foundation", 100}
                }
            };
        }
        
        protected override void LoadConfig()
        {
            base.LoadConfig();
   
            try
            {
                config = Config.ReadObject<ConfigData>();
            }
            catch
            {
                LoadDefaultConfig();
            }

            SaveConfig();
        }

        protected override void LoadDefaultConfig()
        {
            PrintError("Configuration file is corrupt(or not exists), creating new one!");
            config = GetDefaultConfig();
        }

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

        #endregion
    }
}

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