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

FREE DamageController : 1.0.0 1.0.0

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

using Rust;
using System;
using System.Collections.Generic;
using Oxide.Core.Plugins;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace Oxide.Plugins
{

    [Info("DamageController", "Wolfs_Darker", "1.0.0")]
    class DamageController : RustPlugin
    {
        /**
         *  The Damage controller's configuration.*/ 
        public DamageList config = new DamageList();

        /**
         * Damage list configuration.*/ 
        public class DamageList {

            /**
             * Damage receiver's list.*/ 
            public List<DamageReceiver> receivers;

            public DamageList() { 
                receivers = new List<DamageReceiver>(); 
            }

            /**
             * Finds a damage receiver's data from its name.*/ 
            public DamageReceiver forName(String name)
            {
                foreach (DamageReceiver r in receivers)
                {
                    if (r.name.Equals(name))
                    {
                        return r;
                    }
                }
                return null;
            }
        }

        /**
         * Damage Receiver configuration.*/ 
        public class DamageReceiver {

            /**
             * The receiver's name.*/ 
            public String name;

            /**
             * The damage multipliers list.*/ 
            public Dictionary<DamageType, float> list;

            public DamageReceiver(String name) {
                this.name = name;
                list = new Dictionary<DamageType, float>(); 
            }
        }

        protected override void LoadDefaultConfig()
        {
            if (Config["damage_list"] == null)
            {
                config.receivers.Add(new DamageReceiver("building"));
                config.receivers.Add(new DamageReceiver("player"));
                config.receivers.Add(new DamageReceiver("animal"));
                config.receivers.Add(new DamageReceiver("barricade"));

                foreach (DamageReceiver r in config.receivers)
                {
                    foreach (DamageType dmg in Enum.GetValues(typeof(DamageType)))
                    {
                        if (dmg != DamageType.LAST)
                            r.list[dmg] = 1f;
                    }
                }
            }
            Config["damage_list"] = config;
            SaveConfig();
        }

        [HookMethod("OnServerInitialized")]
        void OnServerInitialized()
        {
            try
            {
                LoadConfig();
                config = JsonConvert.DeserializeObject<DamageList>(JsonConvert.SerializeObject(Config["damage_list"]).ToString());
            }
            catch (Exception ex)
            {
                Puts("OnServerInitialized failed: " + ex.Message);
            }
        }

        private void OnEntityTakeDamage(BaseCombatEntity entity, HitInfo hitInfo)
        {
            if (entity == null || hitInfo == null)
                return;

            String target = entity is BasePlayer ? "player" : entity is BuildingBlock ? "building" : entity is BaseNPC ? "animal" : entity is Barricade ? "barricade" : "none";

            DamageReceiver receiver = config.forName(target);

            if (receiver == null)
                return;

            DamageType type = hitInfo.damageTypes.GetMajorityDamageType();

            if (type == null)
                return;


            float modifier;
            if (receiver.list.TryGetValue(type, out modifier))
            {
                hitInfo.damageTypes.Scale(type, modifier);
            }
        }

    }
}

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