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

FREE IQRates : 1.96.33 1.96.33

Нет прав для скачивания
C#:
using Facepunch;
using Newtonsoft.Json;
using System.Linq;
using System.Collections;
using Oxide.Core.Plugins;
using UnityEngine;
using System;
using System.Collections.Generic;
using System.Text;
namespace Oxide.Plugins {
    [Info("IQRates", "IQRates", "1.96.33")]
    [Description("Настройка рейтинга на сервере")]
    class IQRates : RustPlugin {
        private void OnEntitySpawned(CargoPlane entity) {
            NextTick(() => {
                if (entity.OwnerID != 0 || entity.skinID != 0) return;
                var EvenTimer = config.pluginSettings.OtherSetting.EventSetting.CargoPlaneSetting;
                if ((EvenTimer.FullOff || EvenTimer.UseEventCustom)) entity.Kill();
            }
            );
        }
        bool IsTime() {
            var Settings = config.pluginSettings.OtherSetting;
            float TimeServer = TOD_Sky.Instance.Cycle.Hour;
            return TimeServer < Settings.NightStart && Settings.DayStart <= TimeServer;
        }
        void AddQuarryPlayer(UInt64 NetID, UInt64 userID) {
            if (DataQuarryPlayer.ContainsKey(NetID)) DataQuarryPlayer[NetID] = userID;
            else DataQuarryPlayer.Add(NetID, userID);
            WriteData();
        }
        private void OnServerInitialized() {
            _ = this;
            SpacePort = TerrainMeta.Path.Monuments.FirstOrDefault(p => p.name.ToLower().Contains("launch_site"));
            StartEvent();
            foreach (var RateCustom in config.pluginSettings.RateSetting.PrivilegyRates) Register(RateCustom.Key);
            foreach (Configuration.PluginSettings.Rates.RecyclerController.PresetRecycler presetRecycler in config.pluginSettings.RateSetting.RecyclersController.PrivilageSpeedRecycler) Register(presetRecycler.Permissions);
            if (config.pluginSettings.RateSetting.UseSpeedBurnableList) foreach (var BurnableList in config.pluginSettings.RateSetting.SpeedBurableList) Register(BurnableList.Permissions);
            List<String> PrivilegyCustomRatePermissions = config.pluginSettings.RateSetting.CustomRatesPermissions.NightRates.Keys.Union(config.pluginSettings.RateSetting.CustomRatesPermissions.DayRates.Keys).ToList();
            foreach (var RateItemCustom in PrivilegyCustomRatePermissions) Register(RateItemCustom);
            timer.Once(5, GetTimeComponent);
            foreach (BaseOven oven in BaseNetworkable.serverEntities.OfType<BaseOven>()) {
                if (config.pluginSettings.RateSetting.UseSpeedBurnable) {
                    if (config.pluginSettings.RateSetting.IgnoreSpeedBurnablePrefabList.Contains(oven.ShortPrefabName)) continue;
                    OvenController.GetOrAdd(oven).TryRestart();
                }
            }
            if (!config.pluginSettings.RateSetting.UseSpeedBurnable) Unsubscribe(nameof(OnOvenToggle));
            if(!config.pluginSettings.RateSetting.RecyclersController.UseRecyclerSpeed) Unsubscribe(nameof(OnRecyclerToggle));
            if(!config.pluginSettings.RateSetting.UseTeaController) Unsubscribe(nameof(OnPlayerAddModifiers));
            initializeTransport = ServerMgr.Instance.StartCoroutine(InitializeTransport());
        }
        TOD_Time timeComponent = null;
        void OnSunrise() {
            timeComponent.DayLengthInMinutes = config.pluginSettings.OtherSetting.DayTime * (24.0f / (TOD_Sky.Instance.SunsetTime - TOD_Sky.Instance.SunriseTime));
            activatedDay = true;
            if (config.pluginSettings.OtherSetting.UseSkipTime) {
                if (config.pluginSettings.OtherSetting.TypeSkipped == SkipType.Day) TOD_Sky.Instance.Cycle.Hour = config.pluginSettings.OtherSetting.NightStart;
                else {
                    if (config.pluginSettings.OtherSetting.UseAlertDayNight) {
                        Configuration.PluginSettings.Rates.AllRates Rate = config.pluginSettings.RateSetting.DayRates;
                        foreach (BasePlayer player in BasePlayer.activePlayerList) SendChat(GetLang("DAY_RATES_ALERT", player.UserIDString, Rate.GatherRate, Rate.LootRate, Rate.PickUpRate, Rate.QuarryRate, Rate.ExcavatorRate, Rate.GrowableRate), player);
                    }
                }
                return;
            }
            if (config.pluginSettings.OtherSetting.UseAlertDayNight) {
                Configuration.PluginSettings.Rates.AllRates Rate = config.pluginSettings.RateSetting.DayRates;
                foreach (BasePlayer player in BasePlayer.activePlayerList) SendChat(GetLang("DAY_RATES_ALERT", player.UserIDString, Rate.GatherRate, Rate.LootRate, Rate.PickUpRate, Rate.QuarryRate, Rate.ExcavatorRate, Rate.GrowableRate), player);
            }
        }
        Single GetRateQuarryDetalis(Configuration.PluginSettings.Rates.AllRates Rates, String Shortname) {
            Single Rate = Rates.QuarryRate;
            if (!Rates.QuarryDetalis.UseDetalisRateQuarry) return Rate;
            return Rates.QuarryDetalis.ShortnameListQuarry.ContainsKey(Shortname) ? Rates.QuarryDetalis.ShortnameListQuarry[Shortname] : Rate;
        }
        void OnHour() {
            if (TOD_Sky.Instance.Cycle.Hour > TOD_Sky.Instance.SunriseTime && TOD_Sky.Instance.Cycle.Hour < TOD_Sky.Instance.SunsetTime && TOD_Sky.Instance.Cycle.Hour >= config.pluginSettings.OtherSetting.DayStart && !activatedDay) {
                OnSunrise();
                return;
            }
            if ((TOD_Sky.Instance.Cycle.Hour > TOD_Sky.Instance.SunsetTime || TOD_Sky.Instance.Cycle.Hour < TOD_Sky.Instance.SunriseTime) && TOD_Sky.Instance.Cycle.Hour >= config.pluginSettings.OtherSetting.NightStart && activatedDay) {
                OnSunset();
                return;
            }
        }
        /// <summary>
        /// Обновление 1.8.x
        /// - Исправление : Если патрульный вертолет отключен полностью или работает по таймеру - не спавнился боевой вертолет
        /// - Добавлена возможность указать рейты за рыбалку
        [PluginReference]
        Plugin IQChat;
        private ModifierDefintion GetDefintionModifer(Modifier.ModifierType Type, Single Duration, Single Value) {
            ModifierDefintion def = new ModifierDefintion {
                source = Modifier.ModifierSource.Tea, type = Type, duration = Duration, value = Value <= 0 ? 1.0f : Value
            }
            ;
            return def;
        }
        private Coroutine initializeTransport = null;
        private void OnEntitySpawned(Minicopter copter) {
            if (copter == null) return;
            FuelSystemRating(copter.GetFuelSystem(), config.pluginSettings.OtherSetting.FuelSetting.AmountMinicopter);
            copter.fuelPerSec = config.pluginSettings.OtherSetting.FuelConsumedTransportSetting.ConsumedCopter;
        }
        private void UnSubProSub(int time = 1) {
            Unsubscribe("OnEntitySpawned");
            timer.Once(time, () => {
                Subscribe("OnEntitySpawned");
            }
            );
        }
        private MonumentInfo SpacePort;
        private Single GetSpeedRecycler(BasePlayer player) {
            Configuration.PluginSettings.Rates.RecyclerController Recycler = config.pluginSettings.RateSetting.RecyclersController;
            foreach (Configuration.PluginSettings.Rates.RecyclerController.PresetRecycler presetRecycler in Recycler.PrivilageSpeedRecycler) {
                if (permission.UserHasPermission(player.UserIDString, presetRecycler.Permissions)) return presetRecycler.SpeedRecyclers;
            }
            return Recycler.DefaultSpeedRecycler;
        }
        [ChatCommand("rates")]
        private void GetInfoMyRates(BasePlayer player) {
            if (player == null) return;
            var PrivilegyRates = config.pluginSettings.RateSetting.PrivilegyRates;
            Boolean IsTimes = IsTime();
            var Rates = IsTimes ? config.pluginSettings.RateSetting.DayRates : config.pluginSettings.RateSetting.NightRates;
            var CustomRate = IsTimes ? config.pluginSettings.RateSetting.CustomRatesPermissions.DayRates : config.pluginSettings.RateSetting.CustomRatesPermissions.NightRates;
            var Rate = CustomRate.FirstOrDefault(x => IsPermission(player.UserIDString, x.Key));
            foreach (var RatesSetting in PrivilegyRates) if (IsPermission(player.UserIDString, RatesSetting.Key)) Rates = IsTimes ? RatesSetting.Value.DayRates : RatesSetting.Value.NightRates;
            SendChat(GetLang("MY_RATES_INFO", player.UserIDString, Rates.GatherRate, Rates.LootRate, Rates.PickUpRate, Rates.QuarryRate, Rates.ExcavatorRate, Rates.GrowableRate), player);
        }
        private static Configuration config = new Configuration();
        bool IsPermission(string userID, string Permission) {
            if (permission.UserHasPermission(userID, Permission)) return true;
            else return false;
        }
        public Int32 GetMultiplaceBurnableFuelSpeed(String ownerid) {
            Int32 Multiplace = config.pluginSettings.RateSetting.SpeedFuelBurnable;
            if (config.pluginSettings.RateSetting.UseSpeedBurnableList) {
                var SpeedInList = config.pluginSettings.RateSetting.SpeedBurableList.OrderByDescending(z => z.SpeedFuelBurnable).FirstOrDefault(x => permission.UserHasPermission(ownerid, x.Permissions));
                if (SpeedInList != null) Multiplace = SpeedInList.SpeedFuelBurnable;
            }
            return Multiplace;
        }
        private void OnEntitySpawned(MotorRowboat boat) {
            if (boat == null) return;
            boat.fuelPerSec = config.pluginSettings.OtherSetting.FuelConsumedTransportSetting.ConsumedBoat;
        }
        int Converted(Types RateType, string Shortname, float Amount, BasePlayer player = null, String UserID = null) {
            float ConvertedAmount = Amount;
            ItemDefinition definition = ItemManager.FindItemDefinition(Shortname);
            if(definition != null && !IsWhiteList(Shortname)) foreach (String BlackItemCategory in config.pluginSettings.RateSetting.BlackListCategory) {
                ItemCategory Category;
                if (!Enum.TryParse(BlackItemCategory, out Category)) continue;
                if (Category == definition.category) {
                    //PrintToChat($"DEBUG : Категория {BlackItemCategory} заблокирована для множителя");
                    return Convert.ToInt32(ConvertedAmount);
                }
            }
            if (config.pluginSettings.RateSetting.TypeList == TypeListUsed.BlackList) {
                if (IsBlackList(Shortname)) return Convert.ToInt32(ConvertedAmount);
            }
            else {
                if (!IsWhiteList(Shortname)) {
                    //PrintToChat($"DEBUG : Предмет {Shortname} заблокирована для #4468837173 множителя");
                    return Convert.ToInt32(ConvertedAmount);
                }
            }
            var PrivilegyRates = config.pluginSettings.RateSetting.PrivilegyRates;
            Boolean IsTimes = IsTime();
            Configuration.PluginSettings.Rates.AllRates Rates = IsTimes ? config.pluginSettings.RateSetting.DayRates : config.pluginSettings.RateSetting.NightRates;
            UserID = player != null ? player.UserIDString : UserID;
            if (UserID != null) {
                var CustomRate = IsTimes ? config.pluginSettings.RateSetting.CustomRatesPermissions.DayRates : config.pluginSettings.RateSetting.CustomRatesPermissions.NightRates;
                var Rate = CustomRate.FirstOrDefault(x => IsPermission(UserID, x.Key));
                //dbg
                if (Rate.Value != null) foreach (var RateValue in Rate.Value.Where(x => x.Shortname == Shortname)) {
                    ConvertedAmount = Amount * RateValue.Rate;
                    return (int)ConvertedAmount;
                }
                foreach (var RatesSetting in PrivilegyRates) if (IsPermission(UserID, RatesSetting.Key)) Rates = IsTimes ? RatesSetting.Value.DayRates : RatesSetting.Value.NightRates;
            }
            Single BonusRate = GetBonusRate(player);
            switch (RateType) {
                case Types.Gather : {
                    ConvertedAmount = Amount * (Rates.GatherRate + BonusRate);
                    break;
                }
                case Types.Loot : {
                    ConvertedAmount = Amount * (Rates.LootRate + BonusRate);
                    break;
                }
                case Types.PickUP : {
                    ConvertedAmount = Amount * (Rates.PickUpRate + BonusRate);
                    break;
                }
                case Types.Growable : {
                    ConvertedAmount = Amount * (Rates.GrowableRate + BonusRate);
                    break;
                }
                case Types.Quarry : {
                    Single QuarryRates = GetRateQuarryDetalis(Rates, Shortname);
                    ConvertedAmount = Amount * (QuarryRates + BonusRate);
                    break;
                }
                case Types.Excavator : {
                    ConvertedAmount = Amount * (Rates.ExcavatorRate + BonusRate);
                    break;
                }
                case Types.Fishing : {
                    ConvertedAmount = Amount * (Rates.FishRate + BonusRate);
                    break;
                }
            }
            return Convert.ToInt32(ConvertedAmount);
        }
        private void OnEntitySpawned(AttackHelicopter helicopter) {
            if (helicopter == null) return;
            FuelSystemRating(helicopter.GetFuelSystem(), config.pluginSettings.OtherSetting.FuelSetting.AmountAttackHelicopter);
            helicopter.fuelPerSec = config.pluginSettings.OtherSetting.FuelConsumedTransportSetting.ConsumedAttackHelicopter;
        }
        void SpawnPlane() {
            UnSubProSub();
            var position = new Vector3(ConVar.Server.worldsize, 100, ConVar.Server.worldsize) - new Vector3(50f, 0f, 50f);
            var entity = GameManager.server.CreateEntity(prefabPlane, position);
            entity?.Spawn();
        }
        void OnContainerDropItems(ItemContainer container) {
            if (container == null) return;
            var Container = container.entityOwner as LootContainer;
            if (Container == null) return;
            UInt64 NetID = Container.net.ID.Value;
            if (LootersListCrateID.Contains(NetID)) return;
            BasePlayer player = Container.lastAttacker as BasePlayer;
            foreach (var item in container.itemList) item.amount = Converted(Types.Loot, item.info.shortname, item.amount, player);
        }
        private void OnEntitySpawned(HotAirBalloon hotAirBalloon) {
            if (hotAirBalloon == null) return;
            hotAirBalloon.fuelPerSec = config.pluginSettings.OtherSetting.FuelConsumedTransportSetting.ConsumedHotAirBalloon;
        }
        private void StartBreadley(Configuration.PluginSettings.OtherSettings.EventSettings EventSettings) {
            if (SpacePort == null) return;
            if (!EventSettings.BreadlaySetting.FullOff && EventSettings.BreadlaySetting.UseEventCustom) {
                Int32 TimeSpawn = EventSettings.BreadlaySetting.RandomTimeSpawn.UseRandomTime ? GetRandomTime(EventSettings.BreadlaySetting.RandomTimeSpawn.MinEventSpawnTime, EventSettings.BreadlaySetting.RandomTimeSpawn.MaxEventSpawnTime) : EventSettings.BreadlaySetting.EventSpawnTime;
                timer.Once(TimeSpawn, () => {
                    StartBreadley(EventSettings);
                    SpawnTank();
                }
                );
            }
        }
        void OnEntityKill(BaseNetworkable entity) {
            if (entity == null || entity.net == null) return;
            UInt64 NetID = entity.net.ID.Value;
            if (LootersListCrateID.Contains(NetID)) LootersListCrateID.Remove(NetID);
        }
        void OnDispenserBonus(ResourceDispenser disp, BasePlayer player, Item item) {
            if (item == null || player == null) return;
            int Rate = Converted(Types.Gather, item.info.shortname, item.amount, player);
            item.amount = Rate;
        }
        Single GetBonusRate(BasePlayer player) {
            Single Bonus = 0;
            if (player == null) return Bonus;
            if (BonusRates.ContainsKey(player)) Bonus = BonusRates[player];
            return Bonus;
        }
        private void OnEntitySpawned(ScrapTransportHelicopter helicopter) {
            if (helicopter == null) return;
            FuelSystemRating(helicopter.GetFuelSystem(), config.pluginSettings.OtherSetting.FuelSetting.AmountScrapTransport);
            helicopter.fuelPerSec = config.pluginSettings.OtherSetting.FuelConsumedTransportSetting.ConsumedScrapTransport;
        }
        public Dictionary<BasePlayer, Single> BonusRates = new Dictionary<BasePlayer, Single>();
        UInt64? GetQuarryPlayer(UInt64 NetID) {
            if (!DataQuarryPlayer.ContainsKey(NetID)) return null;
            if (DataQuarryPlayer[NetID] == 0) return null;
            return DataQuarryPlayer[NetID];
        }
        void WriteData() => Oxide.Core.Interface.Oxide.DataFileSystem.WriteObject("IQSystem/IQRates/Quarrys", DataQuarryPlayer);
        void OnFuelConsume(BaseOven oven, Item fuel, ItemModBurnable burnable) {
            if (oven == null) return;
            burnable.byproductChance = GetRareCoal(BasePlayer.FindByID(oven.OwnerID));
            if (burnable.byproductChance == 0) burnable.byproductChance = -1;
        }
        void OnQuarryGather(MiningQuarry quarry, Item item) {
            if (item == null || quarry == null) return;
            // PrintError(GetQuarryPlayer(quarry.net.ID + 2744688).ToString() + "   " + Converted(Types.Quarry, item.info.shortname,
            //     item.amount, null, GetQuarryPlayer(quarry.OwnerID).ToString()).ToString());
            item.amount = Converted(Types.Quarry, item.info.shortname, item.amount, null, GetQuarryPlayer(quarry.net.ID.Value).ToString());
        }
        private void GetTimeComponent() {
            timeComponent = TOD_Sky.Instance.Components.Time;
            if (timeComponent == null) return;
            SetTimeComponent();
            StartupFreeze();
        }
        public enum SkipType {
            Day, Night
        }
        void StartEvent() {
            var EventSettings = config.pluginSettings.OtherSetting.EventSetting;
            StartCargoShip(EventSettings);
            StartCargoPlane(EventSettings);
            StartBreadley(EventSettings);
            StartChinoock(EventSettings);
            StartHelicopter(EventSettings);
        }
        private void OnRecyclerToggle(Recycler recycler, BasePlayer player) {
            if (!recycler.IsOn()) {
                NextTick(() => {
                    if (!recycler.IsOn()) return;
                    Single Speed = GetSpeedRecycler(player);
                    recycler.InvokeRepeating(recycler.RecycleThink, Speed, Speed);
                }
                );
            }
        }
        void StartupFreeze() {
            if (!config.pluginSettings.OtherSetting.UseFreezeTime) return;
            timeComponent.ProgressTime = false;
            ConVar.Env.time = config.pluginSettings.OtherSetting.FreezeTime;
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config == null) LoadDefaultConfig();
                if (config.pluginSettings.RateSetting.BlackListCategory == null) config.pluginSettings.RateSetting.BlackListCategory = new List<String>() {
                    "Weapon", "Ammunition", "Traps", "Attire", "Items", "Tools", "Component"
                }
                ;
                if (config.pluginSettings.RateSetting.WhiteList == null) {
                    config.pluginSettings.RateSetting.WhiteList = new List<String>() {
                        "wood", "sulfur.ore"
                    }
                    ;
                }
                if (config.pluginSettings.RateSetting.RecyclersController.DefaultSpeedRecycler == 0f) config.pluginSettings.RateSetting.RecyclersController.DefaultSpeedRecycler = 5f;
                if (config.pluginSettings.RateSetting.BlackListPrefabs == null || config.pluginSettings.RateSetting.BlackListPrefabs.Count == 0) config.pluginSettings.RateSetting.BlackListPrefabs = new List<String>() {
                    "crate_elite", "crate_normal"
                }
                ;
                if (config.pluginSettings.RateSetting.RecyclersController.PrivilageSpeedRecycler == null || config.pluginSettings.RateSetting.RecyclersController.PrivilageSpeedRecycler.Count == 0) {
                    config.pluginSettings.RateSetting.RecyclersController.PrivilageSpeedRecycler = new List<Configuration.PluginSettings.Rates.RecyclerController.PresetRecycler>() {
                        new Configuration.PluginSettings.Rates.RecyclerController.PresetRecycler() {
                            Permissions = "iqrates.recyclerhyperfast", SpeedRecyclers = 0
                        }
                        , new Configuration.PluginSettings.Rates.RecyclerController.PresetRecycler() {
                            Permissions = "iqrates.recyclerfast", SpeedRecyclers = 3
                        }
                        ,
                    }
                    ;
                }
                if (config.pluginSettings.RateSetting.DayRates.QuarryDetalis.ShortnameListQuarry.Count == 0) config.pluginSettings.RateSetting.DayRates.QuarryDetalis = new Configuration.PluginSettings.Rates.AllRates.QuarryRateDetalis() {
                    UseDetalisRateQuarry = false, ShortnameListQuarry = new Dictionary<String, Single>() {
                        ["metal.ore"]
                        = 10, ["sulfur.ore"] = 5
                    }
                }
                ;
                if (config.pluginSettings.RateSetting.NightRates.QuarryDetalis.ShortnameListQuarry.Count == 0) config.pluginSettings.RateSetting.NightRates.QuarryDetalis = new Configuration.PluginSettings.Rates.AllRates.QuarryRateDetalis() {
                    UseDetalisRateQuarry = false, ShortnameListQuarry = new Dictionary<String, Single>() {
                        ["metal.ore"]
                        = 10, ["sulfur.ore"] = 5
                    }
                }
                ;
            }
            catch {
                PrintWarning(LanguageEn ? "Error #334472943" + $"read configuration 'oxide/config/{Name}', create a new configuration!!" : "Ошибка #334343" + $"чтения конфигурации 'oxide/config/{Name}', создаём новую конфигурацию!!");
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
        private void FuelSystemRating(IFuelSystem FuelSystem, Int32 Amount) {
            if (FuelSystem == null) return;
            NextTick(() => {
                var Fuel = FuelSystem.GetFuelAmount();
                if (Fuel == null) return;
                if (Fuel == 50 || Fuel == 100) Fuel = Amount;
            }
            );
        }
        void OnAirdrop(CargoPlane plane, Vector3 dropPosition) => plane.OwnerID = 999999999999;
        public Single GetMultiplaceBurnableSpeed(String ownerid) {
            Single Multiplace = config.pluginSettings.RateSetting.SpeedBurnable;
            if (config.pluginSettings.RateSetting.UseSpeedBurnableList) {
                var SpeedInList = config.pluginSettings.RateSetting.SpeedBurableList.OrderByDescending(z => z.SpeedBurnable).FirstOrDefault(x => permission.UserHasPermission(ownerid, x.Permissions));
                if (SpeedInList != null) Multiplace = SpeedInList.SpeedBurnable;
            }
            return Multiplace;
        }
        private const string prefabCH47 = "assets/prefabs/npc/ch47/ch47scientists.entity.prefab";
        void SpawnHeli() {
            UnSubProSub();
            var position = new Vector3(ConVar.Server.worldsize, 100, ConVar.Server.worldsize) - new Vector3(50f, 0f, 50f);
            var entity = GameManager.server.CreateEntity(prefabPatrol, position);
            entity?.Spawn();
        }
        private readonly Dictionary<String, ModiferTea> TeaModifers = new Dictionary<String, ModiferTea> {
            ["oretea.advanced"]
            = new ModiferTea() {
                Duration = 1800f, Value = 0.35f, Type = Modifier.ModifierType.Ore_Yield
            }
            , ["oretea"] = new ModiferTea() {
                Duration = 1800f, Value = 0.2f, Type = Modifier.ModifierType.Ore_Yield
            }
            , ["oretea.pure"] = new ModiferTea() {
                Duration = 1800f, Value = 0.5f, Type = Modifier.ModifierType.Ore_Yield
            }
            , ["woodtea.advanced"] = new ModiferTea() {
                Duration = 1800f, Value = 1.0f, Type = Modifier.ModifierType.Wood_Yield
            }
            , ["woodtea"] = new ModiferTea() {
                Duration = 1800f, Value = 0.5f, Type = Modifier.ModifierType.Wood_Yield
            }
            , ["woodtea.pure"] = new ModiferTea() {
                Duration = 1800f, Value = 2.0f, Type = Modifier.ModifierType.Wood_Yield
            }
            , ["scraptea.advanced"] = new ModiferTea() {
                Duration = 2700f, Value = 2.25f, Type = Modifier.ModifierType.Scrap_Yield
            }
            , ["scraptea"] = new ModiferTea() {
                Duration = 1800f, Value = 1.0f, Type = Modifier.ModifierType.Scrap_Yield
            }
            , ["scraptea.pure"] = new ModiferTea() {
                Duration = 3600f, Value = 3.5f, Type = Modifier.ModifierType.Scrap_Yield
            }
            ,
        }
        ;
        public void Register(string Permissions) {
            if (!String.IsNullOrWhiteSpace(Permissions)) if (!permission.PermissionExists(Permissions, this)) permission.RegisterPermission(Permissions, this);
        }
        private void OnEntitySpawned(SupplySignal entity) => UnSubProSub(10);
        public Dictionary<UInt64, UInt64> DataQuarryPlayer = new Dictionary<UInt64, UInt64>();
        void SpawnCargo() {
            UnSubProSub();
            var cargoShip = GameManager.server.CreateEntity(prefabShip) as CargoShip;
            if (cargoShip == null) return;
            cargoShip.TriggeredEventSpawn();
            cargoShip.SendNetworkUpdate();
            cargoShip.RefreshActiveLayout();
            cargoShip.Spawn();
        }
        private void OnEntitySpawned(BaseBoat boat) {
            if (boat == null) return;
            FuelSystemRating(boat.GetFuelSystem(), config.pluginSettings.OtherSetting.FuelSetting.AmountBoat);
        }
        private object OnPlayerAddModifiers(BasePlayer player, Item item, ItemModConsumable consumable) {
            if (!TeaModifers.ContainsKey(item.info.shortname)) return true;
            List<ModifierDefintion> mods = Pool.GetList<ModifierDefintion>();
            Dictionary<String, Configuration.PluginSettings.Rates.DayAnNightRate> PrivilegyRates = config.pluginSettings.RateSetting.PrivilegyRates;
            Boolean IsTimes = IsTime();
            Configuration.PluginSettings.Rates.AllRates Rates = IsTimes ? config.pluginSettings.RateSetting.DayRates : config.pluginSettings.RateSetting.NightRates;
            Configuration.PluginSettings.Rates.AllRates DefaultRates = IsTimes ? config.pluginSettings.RateSetting.DayRates : config.pluginSettings.RateSetting.NightRates;
            Single ModiferDifference = 1.0f;
            Single DefaultRate = 1.0f;
            Single PlayerRate = 1.0f;
            foreach (var RatesSetting in PrivilegyRates) if (IsPermission(player.UserIDString, RatesSetting.Key)) Rates = IsTimes ? RatesSetting.Value.DayRates : RatesSetting.Value.NightRates;
            Single BonusRate = GetBonusRate(player);
            ModiferTea TeaLocal = TeaModifers[item.info.shortname];
            switch (TeaLocal.Type) {
                case Modifier.ModifierType.Ore_Yield : {
                    DefaultRate = DefaultRates.GatherRate;
                    PlayerRate = Rates.GatherRate + BonusRate;
                    ModiferDifference = (PlayerRate - DefaultRate) <= 0 ? 1 : (PlayerRate - DefaultRate);
                    mods.Add(GetDefintionModifer(TeaLocal.Type, TeaLocal.Duration, TeaLocal.Value / ModiferDifference));
                    break;
                }
                case Modifier.ModifierType.Wood_Yield : {
                    DefaultRate = DefaultRates.GatherRate;
                    PlayerRate = Rates.GatherRate + BonusRate;
                    ModiferDifference = (PlayerRate - DefaultRate) <= 0 ? 1 : (PlayerRate - DefaultRate);
                    mods.Add(GetDefintionModifer(TeaLocal.Type, TeaLocal.Duration, TeaLocal.Value / ModiferDifference));
                    break;
                }
                case Modifier.ModifierType.Scrap_Yield : {
                    DefaultRate = DefaultRates.LootRate;
                    PlayerRate = Rates.LootRate + BonusRate;
                    ModiferDifference = (PlayerRate - DefaultRate) <= 0 ? 1 : (PlayerRate - DefaultRate);
                    mods.Add(GetDefintionModifer(TeaLocal.Type, TeaLocal.Duration, TeaLocal.Value / ModiferDifference));
                    break;
                }
            }
            player.modifiers.Add(mods);
            Pool.FreeList(ref mods);
            return true;
        }
        void SetTimeComponent() {
            if (!config.pluginSettings.OtherSetting.UseTime) return;
            timeComponent.ProgressTime = true;
            timeComponent.UseTimeCurve = false;
            timeComponent.OnSunrise += OnSunrise;
            timeComponent.OnSunset += OnSunset;
            timeComponent.OnHour += OnHour;
            if (TOD_Sky.Instance.Cycle.Hour > TOD_Sky.Instance.SunriseTime && TOD_Sky.Instance.Cycle.Hour < TOD_Sky.Instance.SunsetTime) OnSunrise();
            else OnSunset();
        }
        private const string prefabShip = "assets/content/vehicles/boats/cargoship/cargoshiptest.prefab";
        private BasePlayer ExcavatorPlayer = null;
        void OnCollectiblePickup(CollectibleEntity collectible, BasePlayer player) {
            foreach(ItemAmount item in collectible.itemList) item.amount = Converted(Types.PickUP, item.itemDef.shortname, (Int32)item.amount, player);
        }
        private void StartChinoock(Configuration.PluginSettings.OtherSettings.EventSettings EventSettings) {
            if (!EventSettings.ChinoockSetting.FullOff && EventSettings.ChinoockSetting.UseEventCustom) {
                Int32 TimeSpawn = EventSettings.ChinoockSetting.RandomTimeSpawn.UseRandomTime ? GetRandomTime(EventSettings.ChinoockSetting.RandomTimeSpawn.MinEventSpawnTime, EventSettings.ChinoockSetting.RandomTimeSpawn.MaxEventSpawnTime) : EventSettings.ChinoockSetting.EventSpawnTime;
                timer.Once(TimeSpawn, () => {
                    StartChinoock(EventSettings);
                    SpawnCH47();
                }
                );
            }
        }
        private const string prefabPlane = "assets/prefabs/npc/cargo plane/cargo_plane.prefab";
        private void Init() => ReadData();
        void ReadData() => DataQuarryPlayer = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Dictionary<UInt64, UInt64>>("IQSystem/IQRates/Quarrys");
        Boolean activatedDay;
        private new void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                ["MY_RATES_INFO"]
                = "Your resource rating at the moment :" + "\n- Rating of extracted resources: <color=#FAF0F5>x{0}</color>" + "\n- Rating of found items: <color=#FAF0F5>х{1}</color>" + "\n- Rating of raised items: <color=#FAF0F5>х{2}</color>" + "\n- Career rankings: <color=#FAF0F5>x{3}</color>" + "\n- Excavator Rating: <color=#FAF0F5>x{4}</color>" + "\n- Rating of growable : <color=#FAF0F5>x{5}</color>", ["DAY_RATES_ALERT"] = "The day has come!" + "\nThe global rating on the server has been changed :" + "\n- Rating of extracted resources: <color=#FAF0F5>x{0}</color>" + "\n- Rating of found items: <color=#FAF0F5>х{1}</color>" + "\n- Rating of raised items: <color=#FAF0F5>х{2}</color>" + "\n- Career rankings: <color=#FAF0F5>x{3}</color>" + "\n- Excavator Rating: <color=#FAF0F5>x{4}</color>" + "\n- Rating of growable : <color=#FAF0F5>x{5}</color>", ["NIGHT_RATES_ALERT"] = "Night came!" + "\nThe global rating on the server has been changed :" + "\n- Rating of extracted resources: <color=#FAF0F5>x{0}</color>" + "\n- Rating of found items: <color=#FAF0F5>х{1}</color>" + "\n- Rating of raised items: <color=#FAF0F5>х{2}</color>" + "\n- Career rankings: <color=#FAF0F5>x{3}</color>" + "\n- Excavator Rating: <color=#FAF0F5>x{4}</color>" + "\n- Rating of growable : <color=#FAF0F5>x{5}</color>",
            }
            , this);
            lang.RegisterMessages(new Dictionary<string, string> {
                ["MY_RATES_INFO"]
                = "Ваш рейтинг ресурсов на данный момент :" + "\n- Рейтинг добываемых ресурсов: <color=#FAF0F5>x{0}</color>" + "\n- Рейтинг найденных предметов: <color=#FAF0F5>х{1}</color>" + "\n- Рейтинг поднимаемых предметов: <color=#FAF0F5>х{2}</color>" + "\n- Рейтинг карьеров: <color=#FAF0F5>x{3}</color>" + "\n- Рейтинг экскаватора: <color=#FAF0F5>x{4}</color>" + "\n- Рейтинг грядок : <color=#FAF0F5>x{5}</color>", ["DAY_RATES_ALERT"] = "Наступил день!" + "\nГлобальный рейтинг на сервере был изменен :" + "\n- Рейтинг добываемых ресурсов: <color=#FAF0F5>x{0}</color>" + "\n- Рейтинг найденных предметов: <color=#FAF0F5>х{1}</color>" + "\n- Рейтинг поднимаемых предметов: <color=#FAF0F5>х{2}</color>" + "\n- Рейтинг карьеров: <color=#FAF0F5>x{3}</color>" + "\n- Рейтинг экскаватора: <color=#FAF0F5>x{4}</color>" + "\n- Рейтинг грядок : <color=#FAF0F5>x{5}</color>", ["NIGHT_RATES_ALERT"] = "Наступила ночь!" + "\nГлобальный рейтинг на сервере был изменен :" + "\n- Рейтинг добываемых ресурсов: <color=#FAF0F5>x{0}</color>" + "\n- Рейтинг найденных предметов: <color=#FAF0F5>х{1}</color>" + "\n- Рейтинг поднимаемых предметов: <color=#FAF0F5>х{2}</color>" + "\n- Рейтинг карьеров: <color=#FAF0F5>x{3}</color>" + "\n- Рейтинг экскаватора: <color=#FAF0F5>x{4}</color>" + "\n- Рейтинг грядок : <color=#FAF0F5>x{5}</color>",
            }
            , this, "ru");
        }
        private void OnEntitySpawned(CargoShip entity) {
            NextTick(() => {
                if (entity.OwnerID != 0 || entity.skinID != 0) return;
                var EvenTimer = config.pluginSettings.OtherSetting.EventSetting.CargoShipSetting;
                if ((EvenTimer.FullOff || EvenTimer.UseEventCustom)) entity.Kill();
            }
            );
        }
        private const Boolean LanguageEn = false;
        private void OnEntitySpawned(PatrolHelicopter entity) {
            NextTick(() => {
                if (entity.OwnerID != 0 || entity.skinID != 0) return;
                var EvenTimer = config.pluginSettings.OtherSetting.EventSetting.HelicopterSetting;
                if ((EvenTimer.FullOff || EvenTimer.UseEventCustom)) entity.Kill();
            }
            );
        }
        private void SpawnTank() {
            UnSubProSub();
            if (!BradleySpawner.singleton.spawned.isSpawned) BradleySpawner.singleton?.SpawnBradley();
        }
        object OnDispenserGather(ResourceDispenser dispenser, BaseEntity entity, Item item) {
            BasePlayer player = entity as BasePlayer;
            if (item == null || player == null) return null;
            Int32 Rate = Converted(Types.Gather, item.info.shortname, item.amount, player);
            item.amount = Rate;
            return null;
        }
        bool IsWhiteList(string Shortname) {
            var WhiteList = config.pluginSettings.RateSetting.WhiteList;
            if (WhiteList.Contains(Shortname)) return true;
            else return false;
        }
        void OnSunset() {
            timeComponent.DayLengthInMinutes = config.pluginSettings.OtherSetting.NightTime * (24.0f / (24.0f - (TOD_Sky.Instance.SunsetTime - TOD_Sky.Instance.SunriseTime)));
            activatedDay = false;
            if (config.pluginSettings.OtherSetting.UseSkipTime) {
                if (config.pluginSettings.OtherSetting.TypeSkipped == SkipType.Night) TOD_Sky.Instance.Cycle.Hour = config.pluginSettings.OtherSetting.DayStart;
                else {
                    if (config.pluginSettings.OtherSetting.UseAlertDayNight) {
                        Configuration.PluginSettings.Rates.AllRates Rate = config.pluginSettings.RateSetting.NightRates;
                        foreach (BasePlayer player in BasePlayer.activePlayerList) SendChat(GetLang("NIGHT_RATES_ALERT", player.UserIDString, Rate.GatherRate, Rate.LootRate, Rate.PickUpRate, Rate.QuarryRate, Rate.ExcavatorRate, Rate.GrowableRate), player);
                    }
                }
                return;
            }
            if (config.pluginSettings.OtherSetting.UseAlertDayNight) {
                Configuration.PluginSettings.Rates.AllRates Rate = config.pluginSettings.RateSetting.NightRates;
                foreach (BasePlayer player in BasePlayer.activePlayerList) SendChat(GetLang("NIGHT_RATES_ALERT", player.UserIDString, Rate.GatherRate, Rate.LootRate, Rate.PickUpRate, Rate.QuarryRate, Rate.ExcavatorRate, Rate.GrowableRate), player);
            }
        }
        int API_CONVERT_GATHER(string Shortname, float Amount, BasePlayer player = null) => Converted(Types.Gather, Shortname, Amount, player);
        private void OnEntitySpawned(CH47Helicopter entity) {
            NextTick(() => {
                if (entity.OwnerID != 0 || entity.skinID != 0) return;
                timer.Once(3f, () => {
                    var EvenTimer = config.pluginSettings.OtherSetting.EventSetting.ChinoockSetting;
                    if ((EvenTimer.FullOff || EvenTimer.UseEventCustom) && entity.mountPoints.Where(x => x.mountable.GetMounted() != null && x.mountable.GetMounted().ShortPrefabName.Contains("scientistnpc_heavy")).Count() <= 0) timer.Once(1f, () => {
                        entity.Kill();
                    }
                    );
                }
                );
            }
            );
        }
        private const string prefabPatrol = "assets/prefabs/npc/patrol helicopter/patrolhelicopter.prefab";
        private void StartCargoShip(Configuration.PluginSettings.OtherSettings.EventSettings EventSettings) {
            if (!EventSettings.CargoShipSetting.FullOff && EventSettings.CargoShipSetting.UseEventCustom) {
                Int32 TimeSpawn = EventSettings.CargoShipSetting.RandomTimeSpawn.UseRandomTime ? GetRandomTime(EventSettings.CargoShipSetting.RandomTimeSpawn.MinEventSpawnTime, EventSettings.CargoShipSetting.RandomTimeSpawn.MaxEventSpawnTime) : EventSettings.CargoShipSetting.EventSpawnTime;
                timer.Once(TimeSpawn, () => {
                    StartCargoShip(EventSettings);
                    SpawnCargo();
                }
                );
            }
        }
        protected override void SaveConfig() => Config.WriteObject(config);
        private IEnumerator InitializeTransport() {
            foreach (BaseNetworkable entity in BaseNetworkable.serverEntities.Where(e => e is BaseVehicle)) {
                if (entity is MotorRowboat) OnEntitySpawned((MotorRowboat)entity);
                if(entity is Snowmobile) OnEntitySpawned((Snowmobile)entity);
                if(entity is HotAirBalloon) OnEntitySpawned((HotAirBalloon)entity);
                if(entity is RHIB) OnEntitySpawned((RHIB)entity);
                if(entity is BaseSubmarine) OnEntitySpawned((BaseSubmarine)entity);
                if(entity is Minicopter) OnEntitySpawned((Minicopter)entity);
                if(entity is ScrapTransportHelicopter) OnEntitySpawned((ScrapTransportHelicopter)entity);
                yield return CoroutineEx.waitForSeconds(0.03f);
            }
        }
        void API_BONUS_RATE_ADDPLAYER(UInt64 userID, Single Rate) {
            BasePlayer player = BasePlayer.FindByID(userID);
            API_BONUS_RATE_ADDPLAYER(player, Rate);
        }
        void OnLootEntity(BasePlayer player, BaseEntity entity) {
            if (entity == null) return;
            if(config.pluginSettings.RateSetting.UseBlackListPrefabs) if (config.pluginSettings.RateSetting.BlackListPrefabs.Contains(entity.ShortPrefabName)) return;
            LootContainer container = entity as LootContainer;
            if (entity.net == null) return;
            UInt64 NetID = entity.net.ID.Value;
            if (LootersListCrateID.Contains(NetID)) return;
            if (container == null) {
                if (!(entity is NPCPlayerCorpse)) return;
                NPCPlayerCorpse corpse = (NPCPlayerCorpse)entity;
                foreach (ItemContainer corpseContainer in corpse.containers) {
                    foreach (Item item in corpseContainer.itemList) item.amount = Converted(Types.Loot, item.info.shortname, item.amount, player);
                }
            }
            else {
                foreach (Item item in container.inventory.itemList) item.amount = Converted(Types.Loot, item.info.shortname, item.amount, player);
            }
            LootersListCrateID.Add(NetID);
        }
        bool IsBlackList(string Shortname) {
            var BlackList = config.pluginSettings.RateSetting.BlackList;
            if (BlackList.Contains(Shortname)) return true;
            else return false;
        }
        private void OnEntitySpawned(RHIB boat) {
            if (boat == null) return;
            boat.fuelPerSec = config.pluginSettings.OtherSetting.FuelConsumedTransportSetting.ConsumedBoat;
        }
        private Int32 GetRandomTime(Int32 Min, Int32 Max) => UnityEngine.Random.Range(Min, Max);
        private void OnEntitySpawned(BradleyAPC entity) {
            NextTick(() => {
                if (entity.OwnerID != 0 || entity.skinID != 0) return;
                var EvenTimer = config.pluginSettings.OtherSetting.EventSetting.BreadlaySetting;
                if ((EvenTimer.FullOff || EvenTimer.UseEventCustom)) entity.Kill();
            }
            );
        }
        void OnQuarryToggled(MiningQuarry quarry, BasePlayer player) {
            AddQuarryPlayer(quarry.net.ID.Value, player.userID);
        }
        public enum TypeListUsed {
            WhiteList, BlackList
        }
        private object OnOvenToggle(BaseOven oven, BasePlayer player) {
            if (config.pluginSettings.RateSetting.IgnoreSpeedBurnablePrefabList.Contains(oven.ShortPrefabName)) return null;
            return OvenController.GetOrAdd(oven).Switch(player);
        }
        public List<UInt64> LootersListCrateID = new List<UInt64>();
        private void Unload() {
            OvenController.KillAll();
            if (timeComponent == null) return;
            timeComponent.OnSunrise -= OnSunrise;
            timeComponent.OnSunset -= OnSunset;
            timeComponent.OnHour -= OnHour;
            if (initializeTransport != null) {
                ServerMgr.Instance.StopCoroutine(initializeTransport);
                initializeTransport = null;
            }
        }
        private void StartHelicopter(Configuration.PluginSettings.OtherSettings.EventSettings EventSettings) {
            if (!EventSettings.HelicopterSetting.FullOff && EventSettings.HelicopterSetting.UseEventCustom) {
                Int32 TimeSpawn = EventSettings.HelicopterSetting.RandomTimeSpawn.UseRandomTime ? GetRandomTime(EventSettings.HelicopterSetting.RandomTimeSpawn.MinEventSpawnTime, EventSettings.HelicopterSetting.RandomTimeSpawn.MaxEventSpawnTime) : EventSettings.HelicopterSetting.EventSpawnTime;
                timer.Once(TimeSpawn, () => {
                    StartHelicopter(EventSettings);
                    SpawnHeli();
                }
                );
            }
        }
        void SpawnCH47() {
            UnSubProSub();
            var position = new Vector3(ConVar.Server.worldsize, 100, ConVar.Server.worldsize) - new Vector3(50f, 0f, 50f);
            var entity = GameManager.server.CreateEntity(prefabCH47, position) as CH47HelicopterAIController;
            entity?.TriggeredEventSpawn();
            entity?.Spawn();
        }
        void OnGrowableGathered(GrowableEntity plant, Item item, BasePlayer player) {
            if (item == null || player == null) return;
            item.amount = Converted(Types.Growable, item.info.shortname, item.amount, player);
        }
        float GetRareCoal(BasePlayer player = null) {
            Boolean IsTimes = IsTime();
            var Rates = IsTimes ? config.pluginSettings.RateSetting.DayRates : config.pluginSettings.RateSetting.NightRates;
            var PrivilegyRates = config.pluginSettings.RateSetting.PrivilegyRates;
            if (player != null) {
                foreach (var RatesSetting in PrivilegyRates) if (IsPermission(player.UserIDString, RatesSetting.Key)) Rates = IsTimes ? RatesSetting.Value.DayRates : RatesSetting.Value.NightRates;
            }
            float Rare = Rates.CoalRare;
            float RareResult = (100 - Rare) / 100;
            return RareResult;
        }
        private class Configuration {
            public static Configuration GetNewConfiguration() {
                return new Configuration {
                    pluginSettings = new PluginSettings {
                        ReferenceSettings = new PluginSettings.ReferencePlugin {
                            IQChatSetting = new PluginSettings.ReferencePlugin.IQChatReference {
                                CustomAvatar = "0", CustomPrefix = "[IQRates]", UIAlertUse = false,
                            }
                            ,
                        }
                        , RateSetting = new PluginSettings.Rates {
                            UseTeaController = false, UseBlackListPrefabs = false, BlackListCategory = new List<String>() {
                                "Weapon", "Ammunition", "Traps", "Attire", "Items", "Tools", "Component"
                            }
                            , WhiteList = new List<String>() {
                                "scrap", "rope", "metalblade", "propanetank", "tarp", "sewingkit", "fuse", "metalspring", "roadsigns", "sheetmetal", "gears", "riflebody", "smgbody", "semibody",
                            }
                            , TypeList = TypeListUsed.BlackList, BlackListPrefabs = new List<String>() {
                                "crate_elite", "crate_normal"
                            }
                            , UseSpeedBurnable = true, SpeedBurnable = 3.5f, SpeedFuelBurnable = 1, UseBlackListBurnable = false, BlackListBurnable = new List<String> {
                                "wolfmeat.cooked", "deermeat.cooked", "meat.pork.cooked", "humanmeat.cooked", "chicken.cooked", "bearmeat.cooked", "horsemeat.cooked",
                            }
                            , RecyclersController = new PluginSettings.Rates.RecyclerController {
                                UseRecyclerSpeed = false, DefaultSpeedRecycler = 5, PrivilageSpeedRecycler = new List<PluginSettings.Rates.RecyclerController.PresetRecycler> {
                                    new PluginSettings.Rates.RecyclerController.PresetRecycler {
                                        Permissions =
// ... [Code preview truncated due to length. Full source in attached file] ...

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