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

FREE ReviveArrows : 1.0.1 1.0.1

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

namespace Oxide.Plugins
{
    [Info("ReviveArrows", "Vliek/redBDGR", "1.0.1", ResourceId = 2824)]
    [Description("Easily revive people with arrows")]

    class ReviveArrows : RustPlugin
    {
        private List<string> activeList = new List<string>();
        private const string permissionName = "revivearrows.use";
        private bool Changed;

        #region Config
        // Config Vars
        private Dictionary<string, object> neededItems = new Dictionary<string, object>();

        private static Dictionary<string, object> NeededItems()
        {
            var al = new Dictionary<string, object> { { "syringe.medical", 1 } };
            return al;
        }

        private class ItemInfo
        {
            public string itemName;
            public int itemAmount;
        }

        protected override void LoadDefaultConfig()
        {
            Config.Clear();
            LoadVariables();
        }

        private void LoadVariables()
        {
            neededItems = (Dictionary<string, object>)GetConfig("Settings", "Items Needed To Revive", NeededItems());

            if (!Changed) return;
            SaveConfig();
            Changed = false;
        }

        #endregion

        private void Init()
        {
            permission.RegisterPermission(permissionName, this);
            LoadVariables();

            lang.RegisterMessages(new Dictionary<string, string>
            {
                //chat
                ["No Permission"] = "You are not allowed to use this command",
                ["Disabled"] = "Revive arrows now disabled",
                ["Enabled"] = "Revive arrows now enabled",
            }, this);
        }

        private void OnPlayerAttack(BasePlayer player, HitInfo info)
        {
            if (player == null)
                return;
            if (!info.Weapon.ShortPrefabName.ToLower().Contains("bow"))
                return;
            if (!activeList.Contains(player.UserIDString))
                return;
            if (info.HitEntity == null)
                return;
            BasePlayer target = info.HitEntity.GetComponent<BasePlayer>();
            if (!target)
                return;
            if (!target.IsWounded())
                return;
            if (!HasItems(player))
                return;
            info.damageTypes.ScaleAll(0);
            target.StopWounded();
            TakeItems(player);
        }

        [ChatCommand("togglerevivearrows")]
        private void ToggleReviveArrowsCMD(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, permissionName))
            {
                player.ChatMessage(msg("No Permission", player.UserIDString));
                return;
            }
            if (activeList.Contains(player.UserIDString))
            {
                player.ChatMessage(msg("Disabled", player.UserIDString));
                activeList.Remove(player.UserIDString);
            }
            else
            {
                player.ChatMessage(msg("Activated", player.UserIDString));
                activeList.Add(player.UserIDString);
            }
        }

        private bool HasItems(BasePlayer player)
        {
            List<ItemInfo> x = neededItems.Select(entry => new ItemInfo { itemAmount = (int)entry.Value, itemName = entry.Key }).ToList();
            foreach (Item item in player.inventory.AllItems())
                foreach (ItemInfo info in x.ToList())
                    if (item.info.shortname == info.itemName)
                        if (item.amount >= info.itemAmount)
                            x.Remove(info);
            return x.Count == 0;
        }

        private void TakeItems(BasePlayer player)
        {
            foreach (Item item in player.inventory.AllItems())
                foreach (ItemInfo info in neededItems.Select(entry => new ItemInfo { itemAmount = (int)entry.Value, itemName = entry.Key }).ToList())
                {
                    if (item.info.shortname != info.itemName) continue;
                    if (item.amount == info.itemAmount)
                    {
                        ItemManager.RemoveItem(item);
                        continue;
                    }
                    if (item.amount < info.itemAmount) continue;
                    item.amount -= info.itemAmount;
                }

        }

        private object GetConfig(string menu, string datavalue, object defaultValue)
        {
            var data = Config[menu] as Dictionary<string, object>;
            if (data == null)
            {
                data = new Dictionary<string, object>();
                Config[menu] = data;
                Changed = true;
            }
            object value;
            if (!data.TryGetValue(datavalue, out value))
            {
                value = defaultValue;
                data[datavalue] = value;
                Changed = true;
            }
            return value;
        }

        private string msg(string key, string id = null)
        {
            return lang.GetMessage(key, this, id);
        }
    }
}

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