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

FREE Martyrdom : 0.2.1 0.2.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using UnityEngine;
namespace Oxide.Plugins {
    [Info("Martyrdom", "k1lly0u", "0.2.1")]
    [Description("Much like the Martyrdom perk in COD, allows players with permission to drop various explosives when they are killed")]
    class Martyrdom : RustPlugin {
#region Fields
        private Dictionary<ulong, ExplosiveType> registeredMartyrs;
        private Dictionary<ExplosiveType, ExplosiveInfo> explosiveInfo;
#endregion
#region Oxide Hooks
        private void Init() {
            registeredMartyrs = new Dictionary<ulong, ExplosiveType>();
            explosiveInfo = new Dictionary<ExplosiveType, ExplosiveInfo>();
            permission.RegisterPermission("martyrdom.grenade", this);
            permission.RegisterPermission("martyrdom.beancan", this);
            permission.RegisterPermission("martyrdom.explosive", this);
            lang.RegisterMessages(messages, this);
        }
        private void OnServerInitialized() {
            LoadVariables();
            SetExplosiveInfo();
        }
        private void OnEntityDeath(BaseEntity entity, HitInfo info) {
            if (entity == null) return;
            BasePlayer player = entity.ToPlayer();
            if (player != null) {
                if (registeredMartyrs.ContainsKey(player.userID)) TryDropExplosive(player);
            }
        }
#endregion
#region Functions
        private void TryDropExplosive(BasePlayer player) {
            ExplosiveType type = registeredMartyrs[player.userID];
            if (HasPerm(player, type)) {
                if (HasEnoughRes(player, explosiveInfo[type].ItemID, 1)) {
                    TakeResources(player, explosiveInfo[type].ItemID, 1);
                    CreateExplosive(type, player);
                    registeredMartyrs.Remove(player.userID);
                    return;
                }
            }
        }
        private void CreateExplosive(ExplosiveType type, BasePlayer player) {
            ExplosiveInfo info = explosiveInfo[type];
            BaseEntity entity = GameManager.server.CreateEntity(info.PrefabName, player.transform.position + new Vector3(0, 1.5f, 0), new Quaternion(), true);
            entity.OwnerID = player.userID;
            entity.creatorEntity = player;
            TimedExplosive explosive = entity.GetComponent<TimedExplosive>();
            explosive.timerAmountMax = info.Fuse;
            explosive.timerAmountMin = info.Fuse;
            explosive.explosionRadius = info.Radius;
            explosive.damageTypes = new List<Rust.DamageTypeEntry> {
                new Rust.DamageTypeEntry {
                    amount = info.Damage, type = Rust.DamageType.Explosion
                }
            }
            ;
            explosive.Spawn();
        }
#endregion
#region Helpers
        private bool HasEnoughRes(BasePlayer player, int itemid, int amount) => player.inventory.GetAmount(itemid) >= amount;
        private void TakeResources(BasePlayer player, int itemid, int amount) => player.inventory.Take(null, itemid, amount);
        private bool HasPerm(BasePlayer player, ExplosiveType type) {
            switch (type) {
                case ExplosiveType.Grenade : return permission.UserHasPermission(player.UserIDString, "martyrdom.grenade");
                case ExplosiveType.Beancan : return permission.UserHasPermission(player.UserIDString, "martyrdom.beancan");
                case ExplosiveType.Explosive : return permission.UserHasPermission(player.UserIDString, "martyrdom.explosive");
            }
            return false;
        }
        private bool HasAnyPerm(BasePlayer player) => permission.UserHasPermission(player.UserIDString, "martyrdom.grenade") || permission.UserHasPermission(player.UserIDString, "martyrdom.beancan") || permission.UserHasPermission(player.UserIDString, "martyrdom.explosive");
#endregion
#region Explosive Info
        private void SetExplosiveInfo() {
            if (configData.Beancan.Activated) explosiveInfo.Add(ExplosiveType.Beancan, new ExplosiveInfo {
                ItemID = 384204160, PrefabName = "assets/prefabs/weapons/beancan grenade/grenade.beancan.deployed.prefab", Damage = configData.Beancan.Damage, Fuse = configData.Beancan.Fuse, Radius = configData.Beancan.Radius
            }
            );
            if (configData.Grenade.Activated) explosiveInfo.Add(ExplosiveType.Grenade, new ExplosiveInfo {
                ItemID = -1308622549, PrefabName = "assets/prefabs/weapons/f1 grenade/grenade.f1.deployed.prefab", Damage = configData.Grenade.Damage, Fuse = configData.Grenade.Fuse, Radius = configData.Grenade.Radius
            }
            );
            if (configData.Explosive.Activated) explosiveInfo.Add(ExplosiveType.Explosive, new ExplosiveInfo {
                ItemID = 498591726, PrefabName = "assets/prefabs/tools/c4/explosive.timed.deployed.prefab", Damage = configData.Explosive.Damage, Fuse = configData.Explosive.Fuse, Radius = configData.Explosive.Radius
            }
            );
        }
        private class ExplosiveInfo {
            public int ItemID;
            public string PrefabName;
            public float Damage;
            public float Radius;
            public float Fuse;
        }
        enum ExplosiveType {
            Grenade, Beancan, Explosive
        }
#endregion
#region Chat Commands
        [ChatCommand("m")]
        private void cmdM(BasePlayer player, string command, string[] args) {
            if (!HasAnyPerm(player)) return;
            if (args == null || args.Length == 0) {
                if (HasPerm(player, ExplosiveType.Beancan) && configData.Beancan.Activated) SendReply(player, "/m beancan");
                if (HasPerm(player, ExplosiveType.Grenade) && configData.Grenade.Activated) SendReply(player, "/m grenade");
                if (HasPerm(player, ExplosiveType.Explosive) && configData.Explosive.Activated) SendReply(player, "/m explosive");
                SendReply(player, "/m disable");
                return;
            }
            switch (args[0].ToLower()) {
                case "beancan" : if (HasPerm(player, ExplosiveType.Beancan)) {
                    if (!registeredMartyrs.ContainsKey(player.userID)) registeredMartyrs.Add(player.userID, ExplosiveType.Beancan);
                    else registeredMartyrs[player.userID] = ExplosiveType.Beancan;
                    SendReply(player, msg("beanAct", player.UserIDString));
                }
                return;
                case "grenade" : if (HasPerm(player, ExplosiveType.Grenade)) {
                    if (!registeredMartyrs.ContainsKey(player.userID)) registeredMartyrs.Add(player.userID, ExplosiveType.Grenade);
                    else registeredMartyrs[player.userID] = ExplosiveType.Grenade;
                    SendReply(player, msg("grenAct", player.UserIDString));
                }
                return;
                case "explosive" : if (HasPerm(player, ExplosiveType.Explosive)) {
                    if (!registeredMartyrs.ContainsKey(player.userID)) registeredMartyrs.Add(player.userID, ExplosiveType.Explosive);
                    else registeredMartyrs[player.userID] = ExplosiveType.Explosive;
                    SendReply(player, msg("expAct", player.UserIDString));
                }
                return;
                case "disable" : if (registeredMartyrs.ContainsKey(player.userID)) {
                    registeredMartyrs.Remove(player.userID);
                    SendReply(player, msg("marDis", player.UserIDString));
                    return;
                }
                else SendReply(player, msg("notAct", player.UserIDString));
                return;
                default : break;
            }
        }
#endregion
#region Config
        private ConfigData configData;
        private class ConfigData {
            public ExpType Grenade {
                get;
                set;
            }
            public ExpType Beancan {
                get;
                set;
            }
            public ExpType Explosive {
                get;
                set;
            }
            public class ExpType {
                public bool Activated {
                    get;
                    set;
                }
                public float Damage {
                    get;
                    set;
                }
                public float Radius {
                    get;
                    set;
                }
                public float Fuse {
                    get;
                    set;
                }
            }
        }
        private void LoadVariables() {
            LoadConfigVariables();
            SaveConfig();
        }
        protected override void LoadDefaultConfig() {
            var config = new ConfigData {
                Beancan = new ConfigData.ExpType {
                    Activated = true, Damage = 15f, Fuse = 2f, Radius = 4.5f
                }
                , Grenade = new ConfigData.ExpType {
                    Activated = true, Damage = 40f, Fuse = 2f, Radius = 4.5f
                }
                , Explosive = new ConfigData.ExpType {
                    Activated = true, Damage = 500, Fuse = 3, Radius = 10f
                }
            }
            ;
            SaveConfig(config);
        }
        private void LoadConfigVariables() => configData = Config.ReadObject<ConfigData>();
        private void SaveConfig(ConfigData config) => Config.WriteObject(config, true);
#endregion
#region Localization
        private string msg(string key, string id = null) => lang.GetMessage(key, this, id);
        private Dictionary<string, string> messages = new Dictionary<string, string>() {
            {
                "beanAct", "You have activated the beancan Martyr drop"
            }
            , {
                "grenAct", "You have activated the grenade Martyr drop"
            }
            , {
                "expAct", "You have activated the explosive Martyr drop"
            }
            , {
                "marDis", "You have disabled Martyrdom"
            }
            , {
                "notAct", "You do not have Martyrdom activated"
            }
        }
        ;
#endregion
    }
}

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