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

FREE ArrowRaiding : 1.2.0 1.2.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
namespace Oxide.Plugins {
    [Info("Arrow Raiding", "Bruno Puccio", "1.2.0")]
    [Description("allow players to break wooden doors using bow and arrow")]
    class ArrowRaiding : RustPlugin {
        const string perm = "arrowraiding.allowed";
        private ConfigData arrowConfig;
        private class ConfigData {
            public int bowWooden, bowHV, bowBone, crossbowWooden, crossbowHV, crossbowBone;
        }
        private void LoadVariables() {
            LoadConfigVariables();
            SaveConfig();
        }
        protected override void LoadDefaultConfig() {
            ConfigData arrowConfig = new ConfigData {
                bowWooden = 200, bowHV = 250, bowBone = 250, crossbowWooden = 100, crossbowHV = 125, crossbowBone = 125
            }
            ;
            SaveConfig(arrowConfig);
        }
        private void LoadConfigVariables() => arrowConfig = Config.ReadObject<ConfigData>();
        void SaveConfig(ConfigData arrowConfig) => Config.WriteObject(arrowConfig, true);
        private string Lang(string key, string id, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);
        void Init() {
            permission.RegisterPermission(perm, this);
            LoadConfigVariables();
        }
        private new void LoadDefaultMessages() {
            //English
            lang.RegisterMessages(new Dictionary<string, string> {
                ["ValidValues"]
                = "valid values from:   1   to   5000", ["DontHavePermission"] = "<color=#00ffffff>[Arrow Raiding]</color> You do not have permission to use this command", ["CurrentConfig"] = "<color=#00ffffff>[Arrow Raiding]</color>\n\nAmount of arrows needed to break a wooden door\n\n/arrow bowWooden {0} \n/arrow bowHV {1} \n/arrow bowBone {2} \n\n/arrow crossbowWooden {3} \n/arrow crossbowHV {4} \n/arrow crossbowBone {5}", ["ConfigChanged"] = "Now you need to shoot {0} {1} arrows to break a wooden door"
            }
            , this);
        }
        object OnEntityTakeDamage(BaseCombatEntity entity, HitInfo info) {
            if (entity?.ShortPrefabName == "door.hinged.wood") {
                string weaponName = info?.Weapon?.ToString();
                if (weaponName != null) {
                    if (weaponName.Contains("bow_hunting")) info.damageTypes.types[10] = LookForDamage(info.ProjectilePrefab.name, true);
                    else if (weaponName.Contains("crossbow")) info.damageTypes.types[10] = LookForDamage(info.ProjectilePrefab.name, false);
                }
            }
            if (entity?.ShortPrefabName == "door.double.hinged.wood") {
                string weaponName = info?.Weapon?.ToString();
                if (weaponName != null) {
                    if (weaponName.Contains("bow_hunting")) info.damageTypes.types[10] = LookForDamage(info.ProjectilePrefab.name, true)/2;
                    else if (weaponName.Contains("crossbow")) info.damageTypes.types[10] = LookForDamage(info.ProjectilePrefab.name, false)/2;
                }
            }
            return null;
        }
        float LookForDamage(string name, bool isBow) {
            float newDamage = 0;
            switch (name) {
                case "arrow_wooden" : if (isBow) newDamage = 200f / arrowConfig.bowWooden;
                else newDamage = 200f / arrowConfig.crossbowWooden;
                break;
                case "arrow_hv" : if (isBow) newDamage = 200f / arrowConfig.bowHV;
                else newDamage = 200f / arrowConfig.crossbowHV;
                break;
                case "arrow_bone" : if (isBow) newDamage = 200f / arrowConfig.bowBone;
                else newDamage = 200f / arrowConfig.crossbowBone;
                break;
            }
            return newDamage;
        }
        [ChatCommand("arrow")]
        void cmdArrow(BasePlayer player, string command, string[] args) {
            if (!permission.UserHasPermission(player.UserIDString, perm) && player.net.connection.authLevel < 2) {
                SendReply(player, Lang("DontHavePermission", player.UserIDString));
                return;
            }
            if (args.Length != 2) SendReply(player, Lang("CurrentConfig", player.UserIDString, arrowConfig.bowWooden.ToString(), arrowConfig.bowHV.ToString(), arrowConfig.bowBone.ToString(), arrowConfig.crossbowWooden.ToString(), arrowConfig.crossbowHV.ToString(), arrowConfig.crossbowBone.ToString()));
            else {
                int arg;
                if (int.TryParse(args[1], out arg) && arg > 0 && arg <= 5000) {
                    switch (args[0].ToLower()) {
                        case "bowwooden" : arrowConfig.bowWooden = arg;
                        Message(arg.ToString(), "bow wooden", player);
                        break;
                        case "crossbowwooden" : arrowConfig.crossbowWooden = arg;
                        Message(arg.ToString(), "crossbow wooden", player);
                        break;
                        case "bowhv" : arrowConfig.bowHV = arg;
                        Message(arg.ToString(), "bow hv", player);
                        break;
                        case "crossbowhv" : arrowConfig.crossbowHV = arg;
                        Message(arg.ToString(), "crossbow hv", player);
                        break;
                        case "bowbone" : arrowConfig.bowBone = arg;
                        Message(arg.ToString(), "bow bone", player);
                        break;
                        case "crossbowbone" : arrowConfig.crossbowBone = arg;
                        Message(arg.ToString(), "crossbow bone", player);
                        break;
                        default : SendReply(player, Lang("CurrentConfig", player.UserIDString, arrowConfig.bowWooden.ToString(), arrowConfig.bowHV.ToString(), arrowConfig.bowBone.ToString(), arrowConfig.crossbowWooden.ToString(), arrowConfig.crossbowHV.ToString(), arrowConfig.crossbowBone.ToString()));
                        break;
                    }
                }
                else SendReply(player, Lang("ValidValues", player.UserIDString));
            }
        }
        void Message(string val, string arg, BasePlayer player) {
            SaveConfig(arrowConfig);
            SendReply(player, Lang("ConfigChanged", player.UserIDString, val, arg));
        }
    }
}

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