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

FREE ExplosiveBarrels : 1.0.1 1.0.1

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

namespace Oxide.Plugins
{
    [Info("Explosive Barrels", "Orange", "1.0.1")]
    [Description("Allows barrels to blow up on damage or death")]
    public class ExplosiveBarrels : RustPlugin
    {
        #region Vars
        
        private List<string> barrels = new List<string>
        {
            "assets/bundled/prefabs/autospawn/resource/loot/loot-barrel-1.prefab",
            "assets/bundled/prefabs/autospawn/resource/loot/loot-barrel-2.prefab",
            "assets/bundled/prefabs/radtown/loot_barrel_1.prefab",
            "assets/bundled/prefabs/radtown/loot_barrel_2.prefab",
            "assets/bundled/prefabs/radtown/oil_barrel.prefab",
        };
        
        #endregion

        #region Oxide Hooks

        private void OnEntityTakeDamage(BaseCombatEntity entity, HitInfo info)
        {
            CheckBarrel(entity, false);
        }

        private void OnEntityDeath(BaseCombatEntity entity, HitInfo info)
        {
            CheckBarrel(entity, true);
        }

        #endregion

        #region Core

        private void CheckBarrel(BaseCombatEntity entity, bool death)
        {
            if (entity == null) {return;}
            if (!IsBarrel(entity)) {return;}
            var cfg = IsOilBarrel(entity) ? config.oil : config.normal;
            var random = Core.Random.Range(0, 99);
            var chance = death ? cfg.death : cfg.damage;
            if (chance == 0 || random >  chance) {return;}
            Explode(entity, cfg);
        }

        private void Explode(BaseCombatEntity barrel, ConfigData.OBarrel config)
        {
            var position = barrel.transform.position;
            var radius = config.eRadius;
            var damage = config.eDamage;
            var effects = config.effects;

            if (barrel.health > 0)
            {
                try
                {
                    barrel.Hurt(100f);
                }
                catch
                {
                    // ignored
                }
            }

            foreach (var effect in effects)
            {
                var x = Core.Random.Range(-radius, radius);
                var y = Core.Random.Range(0, radius);
                var z = Core.Random.Range(-radius, radius);
                Effect.server.Run(effect, position + new Vector3(x,y,z));
            }
            
            Effect.server.Run("assets/content/weapons/_gestures/effects/eat_1hand_celery.prefab", position);

            var entities = new List<BaseCombatEntity>();
            Vis.Entities(position, radius, entities);
            
            foreach (var entity in entities.ToList())
            {
                try
                {
                    if (entity.health > 0)
                    {
                        entity.Hurt(damage, DamageType.Explosion);
                    }
                }
                catch
                {
                    // ignored
                }
            }
        }

        #endregion

        #region Helpers

        private bool IsBarrel(BaseEntity entity)
        {
            return entity.OwnerID == 0 && barrels.Contains(entity.PrefabName);
        }

        private bool IsOilBarrel(BaseEntity entity)
        {
            return entity.PrefabName.Contains("oil");
        }

        #endregion

        #region Config

        private static ConfigData config;
        
        private class ConfigData
        {    
            [JsonProperty(PropertyName = "1.NORMAL barrels settings:")]
            public OBarrel normal;
            
            [JsonProperty(PropertyName = "2.OIL barrels settings:")]
            public OBarrel oil;

            public class OBarrel
            {
                [JsonProperty(PropertyName = "1.Chance to explode on taking damage (set to 0 to disable)")]
                public int damage;
                
                [JsonProperty(PropertyName = "2.Chance to explode on death (set to 0 to disable)")]
                public int death;
                
                [JsonProperty(PropertyName = "3.Damage on explosion (set to 0 to disable)")]
                public int eDamage;
                
                [JsonProperty(PropertyName = "4.Radius of damage on explosion")]
                public int eRadius;
                
                [JsonProperty(PropertyName = "5.List of effects on explosion")]
                public List<string> effects;
            }
        }
        
        private ConfigData GetDefaultConfig()
        {
            return new ConfigData
            {
                normal = new ConfigData.OBarrel
                {
                    damage = 0,
                    death = 10,
                    eDamage = 0,
                    eRadius = 5,
                    effects = new List<string>
                    {
                        "assets/bundled/prefabs/fx/gas_explosion_small.prefab",
                        "assets/bundled/prefabs/fx/explosions/explosion_03.prefab"
                    }
                },
                oil = new ConfigData.OBarrel
                {
                    damage = 10,
                    death = 75,
                    eDamage = 50,
                    eRadius = 3,
                    effects = new List<string>
                    {
                        "assets/bundled/prefabs/fx/gas_explosion_small.prefab",
                        "assets/bundled/prefabs/fx/explosions/explosion_03.prefab"
                    }
                }
            };
        }
        
        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 оценок
Сверху