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

FREE MountRestrictions : 1.0.2 1.0.2

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

namespace Oxide.Plugins {
    [Info("Mount Restrictions", "Jhawins", "1.0.2")]
    [Description("Restricts equipment when mounting entities based on configuration")]
    class MountRestrictions : CovalencePlugin {
        #region Localization

        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string>() {
                ["Prefix"] = "Mount Restriction: ",
                ["HeavyArmor"] = "Wearing more than 1 heavy item while mounting this is not allowed!",
            }, this, "en");
        }

        private string GetMessage(string key, string id = null) => lang.GetMessage("Prefix", this, id) + lang.GetMessage(key, this, id);

        #endregion

        #region Configuration

        private struct RestrictionSet {
            public List<string> restrictedItems { get; set; }
            public int? maximumAllowed { get; set; }
            public string langKey { get; set; }
            public List<string> entityNames { get; set; }
        }

        private Configuration config;

        private class Configuration {
            [JsonProperty(PropertyName = "RestrictionSets", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<RestrictionSet> RestrictionSets { get; set; }
        }

        private Configuration GetDefaultConfig() {
            return new Configuration {
                RestrictionSets = new List<RestrictionSet>() {
                    {
                        new RestrictionSet {
                            restrictedItems = new List<string> () { "heavy.plate.helmet", "heavy.plate.jacket", "heavy.plate.pants" },
                            maximumAllowed = 1,
                            langKey = "HeavyArmor",
                            entityNames = new List<string> { "testridablehorse", "minicopterentity", "scraptransporthelicopter", "rowboat" }
                        }
                    }
                }
            };
        }

        protected override void LoadDefaultConfig() {
            Config.WriteObject(GetDefaultConfig(), true);
        }

        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config == null) {
                    throw new JsonException();
                }
                SaveConfig();
                Config.WriteObject(config);
            } catch (Exception e) {
                // Likely to be a pretty insane exception.It is probably just invalid JSON
                Puts("Configuration is syntactically invalid! Validate your configuration.Loading defaults {0}", e.ToString());
                LoadDefaultConfig();
                return;
            }
        }

        #endregion

        #region Hooks

        bool? CanMountEntity(BasePlayer player, BaseMountable entity) {
            if (entity != null && player != null) {
                BaseVehicle vehicleEntity = entity.VehicleParent();
                if (vehicleEntity != null && CheckAnyRestrictionsMatched(player.inventory.containerWear.itemList, player, vehicleEntity, false)) {
                    return false;
                }
            }

            return null;
        }

        bool? CanWearItem(PlayerInventory inventory, Item item) {
            BasePlayer player = inventory.containerWear.playerOwner;
            BaseVehicle mountedEntity = player.GetMountedVehicle();
            if (mountedEntity != null) {
                List<Item> newWearables = new List<Item>(player.inventory.containerWear.itemList);
                newWearables.Add(item);
                if (CheckAnyRestrictionsMatched(newWearables, player, mountedEntity, true)) {
                    return false;
                }
                return null;
            }

            return null;
        }

        #endregion

        #region Methods
        // track exceptions, hooks will be unsubscribed after 10 exceptions
        private int ConfigExceptions = 0;
        bool CheckAnyRestrictionsMatched(List<Item> items, BasePlayer player, BaseMountable mountedEntity, bool alreadyMounted) {
            try {
                if (mountedEntity.ShortPrefabName != null) {
                    string entityName = new Regex(@"\W").Replace(mountedEntity.ShortPrefabName, "");
                    List<RestrictionSet> restrictionSets = config.RestrictionSets;
                    List<RestrictionSet> matchedRestrictionSets = restrictionSets.FindAll(restrictionSet => restrictionSet.restrictedItems != null
                        && (restrictionSet.entityNames == null || restrictionSet.entityNames.Contains(entityName))
                        && restrictionSet.restrictedItems.FindAll(itemName => items.Exists(item => item.info.shortname == itemName)).Count > restrictionSet.maximumAllowed);
                    if (matchedRestrictionSets.Count > 0) {
                        matchedRestrictionSets.ForEach(restrictionSet => player.ChatMessage(GetMessage(restrictionSet.langKey, player.UserIDString)));
                        return true;
                    }
                }
            } catch (Exception e) {
                ConfigExceptions++;
                Puts("Error - one or more restriction configurations is probably invalid {0}", e.ToString());
                if (ConfigExceptions >= 10) {
                    Puts("Fatal Error - Max exceptions of 10 has been reached.Unsubscribing hooks.Fix configuration and reload plugin");
                    Unsubscribe(nameof(CanMountEntity));
                    Unsubscribe(nameof(CanWearItem));
                }
            }
            return false;
        }

        #endregion

    }
}

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