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

FREE IQRates : 1.4.8 1.4.8

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using System.Diagnostics;
using Oxide.Core;
using System.Threading;
using System;
using System.Collections;
using Newtonsoft.Json;
using System.Linq;
using Object = System.Object;
using System.Text;
using ProtoBuf;
using Steamworks.Data;
using System.ComponentModel;
using Oxide.Core.Plugins;
using UnityEngine;
namespace Oxide.Plugins {
    [Info("IQRates", "Mercury", "1.4.8")]
    [Description("Настройка рейтинга на сервере")]
    class IQRates : RustPlugin {
        private void OnEntitySpawned(ScrapTransportHelicopter helicopter) {
            if (helicopter == null) return;
            FuelSystemRating(helicopter.GetFuelSystem(), config.pluginSettings.OtherSetting.FuelSetting.AmountScrapTransport);
            helicopter.fuelPerSec = config.pluginSettings.OtherSetting.FuelConsumedTransportSetting.ConsumedScrapTransport;
        }
        int API_CONVERT(Types RateType, string Shortname, float Amount, BasePlayer player = null) => Converted(RateType, Shortname, Amount, player);
        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;
            }
        }
        void SpawnCargo() {
            UnSubProSub();
            var x = TerrainMeta.Size.x;
            var vector3 = Vector3Ex.Range(-1f, 1f);
            vector3.y = 0.0f;
            vector3.Normalize();
            var worldPos = vector3 * (x * 1f);
            worldPos.y = TerrainMeta.WaterMap.GetHeight(worldPos);
            var entity = GameManager.server.CreateEntity(prefabShip, worldPos);
            entity?.Spawn();
        }
        private const Boolean LanguageEn = false;
        private static StringBuilder sb = new StringBuilder();
        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 StartupFreeze() {
            if (!config.pluginSettings.OtherSetting.UseFreezeTime) return;
            timeComponent.ProgressTime = false;
            ConVar.Env.time = config.pluginSettings.OtherSetting.FreezeTime;
        }
        TOD_Time timeComponent = null;
        private const string prefabPlane = "assets/prefabs/npc/cargo plane/cargo_plane.prefab";
        [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 class Configuration {
            internal class PluginSettings {
                internal class ReferencePlugin {
                    [JsonProperty(LanguageEn ? "Setting up IQChat" : "Настройка IQChat")]
                    public IQChatReference IQChatSetting = new IQChatReference();
                    internal class IQChatReference {
                        [JsonProperty(LanguageEn ? "IQChat : Custom chat avatar (If required)" : "IQChat : Кастомный аватар в чате(Если требуется)")]
                        public String CustomAvatar = "0";
                        [JsonProperty(LanguageEn ? "IQChat : Use UI Notifications" : "IQChat : Использовать UI уведомления")]
                        public Boolean UIAlertUse = false;
                        [JsonProperty(LanguageEn ? "IQChat : Custom prefix in chat" : "IQChat : Кастомный префикс в чате")]
                        public String CustomPrefix = "[IQRates]";
                    }
                }
                [JsonProperty(LanguageEn ? "Additional plugin settings" : "Дополнительная настройка плагина")]
                public OtherSettings OtherSetting = new OtherSettings();
                [JsonProperty(LanguageEn ? "Configuring supported plugins" : "Настройка поддерживаемых плагинов")]
                public ReferencePlugin ReferenceSettings = new ReferencePlugin();
                internal class Rates {
                    [JsonProperty(LanguageEn ? "Ranking setting during the day" : "Настройка рейтинга днем")]
                    public AllRates DayRates = new AllRates();
                    [JsonProperty(LanguageEn ? "Setting the rating at night" : "Настройка рейтинга ночью")]
                    public AllRates NightRates = new AllRates();
                    [JsonProperty(LanguageEn ? "Setting privileges and ratings specifically for them [iqrates.vip] = { Setting } (Descending)" : "Настройка привилегий и рейтингов конкретно для них [iqrates.vip] = { Настройка } (По убыванию)")]
                    public Dictionary<String, DayAnNightRate> PrivilegyRates = new Dictionary<String, DayAnNightRate>();
                    [JsonProperty(LanguageEn ? "Setting custom rates (items) by permission - setting (Descending)" : "Настройка кастомных рейтов(предметов) по пермишенсу - настройка (По убыванию)")]
                    public PermissionsRate CustomRatesPermissions = new PermissionsRate();
                    [JsonProperty(LanguageEn ? "Black list of items that will not be categorically affected by the rating" : "Черный лист предметов,на которые катигорично не будут действовать рейтинг")]
                    public List<String> BlackList = new List<String>();
                    [JsonProperty(LanguageEn ? "Use a prefabs blacklist?" : "Использовать черный лист префабов?")]
                    public Boolean UseBlackListPrefabs;
                    [JsonProperty(LanguageEn ? "Black list of prefabs(ShortPrefabName) - which will not be affected by ratings" : "Черный лист префабов(ShortPrefabName) - на которые не будут действовать рейтинги")]
                    public List<String> BlackListPrefabs = new List<String>();
                    [JsonProperty(LanguageEn ? "Enable melting speed in furnaces (true - yes/false - no)" : "Включить скорость плавки в печах(true - да/false - нет)")]
                    public Boolean UseSpeedBurnable;
                    [JsonProperty(LanguageEn ? "Smelting Fuel Usage Rating (If the list is enabled, this value will be the default value for all non-licensed)" : "Рейтинг использования топлива при переплавки(Если включен список - это значение будет стандартное для всех у кого нет прав)")]
                    public Int32 SpeedFuelBurnable = 1;
                    [JsonProperty(LanguageEn ? "A black list of items for the stove, which will not be categorically affected by melting" : "Черный лист предметов для печки,на которые катигорично не будут действовать плавка")]
                    public List<String> BlackListBurnable = new List<String>();
                    [JsonProperty(LanguageEn ? "Furnace smelting speed (If the list is enabled, this value will be the default for everyone who does not have rights)" : "Скорость плавки печей(Если включен список - это значение будет стандартное для всех у кого нет прав)")]
                    public Single SpeedBurnable;
                    [JsonProperty(LanguageEn ? "Enable list of melting speed in furnaces (true - yes/false - no)" : "Включить список скорости плавки в печах(true - да/false - нет)")]
                    public Boolean UseSpeedBurnableList;
                    [JsonProperty(LanguageEn ? "Setting the melting speed in furnaces by privileges" : "Настройка скорости плавки в печах по привилегиям")]
                    public List<SpeedBurnablePreset> SpeedBurableList = new List<SpeedBurnablePreset>();
                    internal class DayAnNightRate {
                        [JsonProperty(LanguageEn ? "Ranking setting during the day" : "Настройка рейтинга днем")]
                        public AllRates DayRates = new AllRates();
                        [JsonProperty(LanguageEn ? "Setting the rating at night" : "Настройка рейтинга ночью")]
                        public AllRates NightRates = new AllRates();
                    }
                    [JsonProperty(LanguageEn ? "Setting up a recycler" : "Настройка переработчика")]
                    public RecyclerController RecyclersController = new RecyclerController();
                    internal class RecyclerController {
                        [JsonProperty(LanguageEn ? "Use the processing time editing functions" : "Использовать функции редактирования времени переработки")]
                        public Boolean UseRecyclerSpeed;
                        [JsonProperty(LanguageEn ? "Static processing time (in seconds) (Will be set according to the standard or if the player does not have the privilege) (Default = 5s)" : "Статичное время переработки (в секундах) (Будет установлено по стандарту или если у игрока нет привилеии) (По умолчанию = 5с)")]
                        public Single DefaultSpeedRecycler;
                        [JsonProperty(LanguageEn ? "Setting the processing time for privileges (adjust from greater privilege to lesser privilege)" : "Настройка времени переработки для привилегий (настраивать от большей привилегии к меньшей)")]
                        public List<PresetRecycler> PrivilageSpeedRecycler = new List<PresetRecycler>();
                        internal class PresetRecycler {
                            [JsonProperty(LanguageEn ? "Permissions" : "Права")]
                            public String Permissions;
                            [JsonProperty(LanguageEn ? "Standard processing time (in seconds)" : "Стандартное время переработки (в секундах)")]
                            public Single SpeedRecyclers;
                        }
                    }
                    internal class SpeedBurnablePreset {
                        [JsonProperty(LanguageEn ? "Permissions" : "Права")]
                        public String Permissions;
                        [JsonProperty(LanguageEn ? "Furnace melting speed" : "Скорость плавки печей")]
                        public Single SpeedBurnable;
                        [JsonProperty(LanguageEn ? "Smelting Fuel Use Rating" : "Рейтинг использования топлива при переплавки")]
                        public Int32 SpeedFuelBurnable = 1;
                    }
                    internal class PermissionsRate {
                        [JsonProperty(LanguageEn ? "Ranking setting during the day" : "Настройка рейтинга днем")]
                        public Dictionary<String, List<PermissionsRateDetalis>> DayRates = new Dictionary<String, List<PermissionsRateDetalis>>();
                        [JsonProperty(LanguageEn ? "Setting the rating at night" : "Настройка рейтинга ночью")]
                        public Dictionary<String, List<PermissionsRateDetalis>> NightRates = new Dictionary<String, List<PermissionsRateDetalis>>();
                        public class PermissionsRateDetalis {
                            [JsonProperty(LanguageEn ? "Shortname" : "Shortname")]
                            public String Shortname;
                            [JsonProperty(LanguageEn ? "Rate" : "Рейтинг")]
                            public Single Rate;
                        }
                    }
                    internal class AllRates {
                        [JsonProperty(LanguageEn ? "Rating of extracted resources" : "Рейтинг добываемых ресурсов")]
                        public Single GatherRate;
                        [JsonProperty(LanguageEn ? "Rating of found items" : "Рейтинг найденных предметов")]
                        public Single LootRate;
                        [JsonProperty(LanguageEn ? "Pickup Rating" : "Рейтинг поднимаемых предметов")]
                        public Single PickUpRate;
                        [JsonProperty(LanguageEn ? "Rating of plants raised from the beds" : "Рейтинг поднимаемых растений с грядок")]
                        public Single GrowableRate = 1.0f;
                        [JsonProperty(LanguageEn ? "Quarry rating" : "Рейтинг карьеров")]
                        public Single QuarryRate;
                        [JsonProperty(LanguageEn ? "Excavator Rating" : "Рейтинг экскаватора")]
                        public Single ExcavatorRate;
                        [JsonProperty(LanguageEn ? "Coal drop chance" : "Шанс выпадения угля")]
                        public Single CoalRare;
                    }
                }
                [JsonProperty(LanguageEn ? "Rating settings" : "Настройка рейтингов")]
                public Rates RateSetting = new Rates();
                internal class OtherSettings {
                    [JsonProperty(LanguageEn ? "Event settings on the server" : "Настройки ивентов на сервере")]
                    public EventSettings EventSetting = new EventSettings();
                    [JsonProperty(LanguageEn ? "Fuel settings when buying vehicles from NPCs" : "Настройки топлива при покупке транспорта у NPC")]
                    public FuelSettings FuelSetting = new FuelSettings();
                    [JsonProperty(LanguageEn ? "Fuel Consumption Rating Settings" : "Настройки рейтинга потребления топлива")]
                    public FuelConsumedTransport FuelConsumedTransportSetting = new FuelConsumedTransport();
                    internal class FuelConsumedTransport {
                        [JsonProperty(LanguageEn ? "Hotairballoon fuel consumption rating (Default = 0.25)" : "Рейтинг потребление топлива у воздушного шара (Стандартно = 0.25)")]
                        public Single ConsumedHotAirBalloon= 0.25f;
                        [JsonProperty(LanguageEn ? "Snowmobile fuel consumption rating (Default = 0.15)" : "Рейтинг потребление топлива снегоходов (Стандартно = 0.15)")]
                        public Single ConsumedSnowmobile = 0.15f;
                        [JsonProperty(LanguageEn ? "Train fuel consumption rating (Default = 0.15)" : "Рейтинг потребление топлива поездов (Стандартно = 0.15)")]
                        public Single ConsumedTrain = 0.15f;
                        [JsonProperty(LanguageEn ? "Rowboat fuel consumption rating (Default = 0.25)" : "Рейтинг потребление топлива у лодок (Стандартно = 0.25)")]
                        public Single ConsumedBoat = 0.25f;
                        [JsonProperty(LanguageEn ? "Submarine fuel consumption rating (Default = 0.15)" : "Рейтинг потребление топлива у субмарин (Стандартно = 0.15)")]
                        public Single ConsumedSubmarine = 0.15f;
                        [JsonProperty(LanguageEn ? "Minicopter fuel consumption rating (Default = 0.25)" : "Рейтинг потребление топлива у миникоптера (Стандартно = 0.25)")]
                        public Single ConsumedCopter = 0.25f;
                        [JsonProperty(LanguageEn ? "ScrapTransportHelicopter fuel consumption rating (Default = 0.25)" : "Рейтинг потребление топлива у коровы (Стандартно = 0.25)")]
                        public Single ConsumedScrapTransport = 0.25f;
                    }
                    internal class FuelSettings {
                        [JsonProperty(LanguageEn ? "Amount of fuel for boats" : "Кол-во топлива у лодок")]
                        public Int32 AmountBoat = 200;
                        [JsonProperty(LanguageEn ? "The amount of fuel in submarines" : "Кол-во топлива у подводных лодок")]
                        public Int32 AmountSubmarine = 200;
                        [JsonProperty(LanguageEn ? "Minicopter fuel quantity" : "Кол-во топлива у миникоптера")]
                        public Int32 AmountMinicopter = 200;
                        [JsonProperty(LanguageEn ? "Helicopter fuel quantity" : "Кол-во топлива у вертолета")]
                        public Int32 AmountScrapTransport = 200;
                    }
                    [JsonProperty(LanguageEn ? "Use Time Acceleration" : "Использовать ускорение времени")]
                    public Boolean UseTime;
                    [JsonProperty(LanguageEn ? "Use time freeze (the time will be the one you set in the item &lt;Frozen time on the server&gt;)" : "Использовать заморозку времени(время будет такое, какое вы установите в пунке <Замороженное время на сервере>)")]
                    public Boolean UseFreezeTime;
                    [JsonProperty(LanguageEn ? "Frozen time on the server (Set time that will not change and be forever on the server, must be true on &lt;Use time freeze&gt;" : "Замороженное время на сервере (Установите время, которое не будет изменяться и будет вечно на сервере, должен быть true на <Использовать заморозку времени>")]
                    public Int32 FreezeTime;
                    [JsonProperty(LanguageEn ? "What time will the day start?" : "Укажите во сколько будет начинаться день")]
                    public Int32 DayStart;
                    [JsonProperty(LanguageEn ? "What time will the night start?" : "Укажите во сколько будет начинаться ночь")]
                    public Int32 NightStart;
                    [JsonProperty(LanguageEn ? "Specify how long the day will be in minutes" : "Укажите сколько будет длится день в минутах")]
                    public Int32 DayTime;
                    [JsonProperty(LanguageEn ? "Specify how long the night will last in minutes" : "Укажите сколько будет длится ночь в минутах")]
                    public Int32 NightTime;
                    [JsonProperty(LanguageEn ? "Use notification of players about the change of day and night (switching rates.The message is configured in the lang)" : "Использовать уведомление игроков о смене дня и ночи (переключение рейтов.Сообщение настраивается в лэнге)")]
                    public Boolean UseAlertDayNight = true;
                    [JsonProperty(LanguageEn ? "Enable the ability to completely skip the time of day (selected in the paragraph below)" : "Включить возможность полного пропуска времени суток(выбирается в пункте ниже)")]
                    public Boolean UseSkipTime = true;
                    [JsonProperty(LanguageEn ? "Select the type of time-of-day skip (0 - Skip day, 1 - Skip night)" : "Выберите тип пропуска времени суток (0 - Пропускать день, 1 - Пропускать ночь)(Не забудьте включить возможность полного пропуска времени суток)")]
                    public SkipType TypeSkipped = SkipType.Night;
                    internal class EventSettings {
                        [JsonProperty(LanguageEn ? "Helicopter spawn custom settings" : "Кастомные настройки спавна вертолета")]
                        public Setting HelicopterSetting = new Setting();
                        [JsonProperty(LanguageEn ? "Custom tank spawn settings" : "Кастомные настройки спавна танка")]
                        public Setting BreadlaySetting = new Setting();
                        [JsonProperty(LanguageEn ? "Custom ship spawn settings" : "Кастомные настройки спавна корабля")]
                        public Setting CargoShipSetting = new Setting();
                        [JsonProperty(LanguageEn ? "Airdrop spawn custom settings" : "Кастомные настройки спавна аирдропа")]
                        public Setting CargoPlaneSetting = new Setting();
                        [JsonProperty(LanguageEn ? "Chinook custom spawn settings" : "Кастомные настройки спавна чинука")]
                        public Setting ChinoockSetting = new Setting();
                        internal class Setting {
                            [JsonProperty(LanguageEn ? "Completely disable event spawning on the server (true - yes/false - no)" : "Полностью отключить спавн ивента на сервере(true - да/false - нет)")]
                            public Boolean FullOff;
                            [JsonProperty(LanguageEn ? "Enable custom spawn event (true - yes/false - no)" : "Включить кастомный спавн ивент(true - да/false - нет)")]
                            public Boolean UseEventCustom;
                            [JsonProperty(LanguageEn ? "Static event spawn time" : "Статическое время спавна ивента")]
                            public Int32 EventSpawnTime;
                            [JsonProperty(LanguageEn ? "Random spawn time settings" : "Настройки случайного времени спавна")]
                            public RandomingTime RandomTimeSpawn = new RandomingTime();
                            internal class RandomingTime {
                                [JsonProperty(LanguageEn ? "Use random event spawn time (static time will not be taken into account) (true - yes/false - no)" : "Использовать случайное время спавно ивента(статическое время не будет учитываться)(true - да/false - нет)")]
                                public Boolean UseRandomTime;
                                [JsonProperty(LanguageEn ? "Minimum event spawn value" : "Минимальное значение спавна ивента")]
                                public Int32 MinEventSpawnTime;
                                [JsonProperty(LanguageEn ? "Max event spawn value" : "Максимальное значении спавна ивента")]
                                public Int32 MaxEventSpawnTime;
                            }
                        }
                    }
                }
            }
            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 {
                            UseBlackListPrefabs = false, BlackListPrefabs = new List<String>() {
                                "crate_elite", "crate_normal"
                            }
                            , UseSpeedBurnable = true, SpeedBurnable = 3.5f, SpeedFuelBurnable = 1, 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 = "iqrates.recyclerhyperfast", SpeedRecyclers = 0
                                    }
                                    , new PluginSettings.Rates.RecyclerController.PresetRecycler {
                                        Permissions = "iqrates.recyclerfast", SpeedRecyclers = 3
                                    }
                                    ,
                                }
                                ,
                            }
                            , UseSpeedBurnableList = true, SpeedBurableList = new List<PluginSettings.Rates.SpeedBurnablePreset> {
                                new PluginSettings.Rates.SpeedBurnablePreset {
                                    Permissions = "iqrates.vip", SpeedBurnable = 5.0f, SpeedFuelBurnable = 20,
                                }
                                , new PluginSettings.Rates.SpeedBurnablePreset {
                                    Permissions = "iqrates.speedrun", SpeedBurnable = 55.0f, SpeedFuelBurnable = 20,
                                }
                                , new PluginSettings.Rates.SpeedBurnablePreset {
                                    Permissions = "iqrates.fuck", SpeedBurnable = 200f, SpeedFuelBurnable = 20,
                                }
                                ,
                            }
                            , DayRates = new PluginSettings.Rates.AllRates {
                                GatherRate = 1.0f, LootRate = 1.0f, PickUpRate = 1.0f, GrowableRate = 1.0f, QuarryRate = 1.0f, ExcavatorRate = 1.0f, CoalRare = 10,
                            }
                            , NightRates = new PluginSettings.Rates.AllRates {
                                GatherRate = 2.0f, LootRate = 2.0f, PickUpRate = 2.0f, GrowableRate = 2.0f, QuarryRate = 2.0f, ExcavatorRate = 2.0f, CoalRare = 15,
                            }
                            , CustomRatesPermissions = new PluginSettings.Rates.PermissionsRate {
                                DayRates = new Dictionary<String, List<PluginSettings.Rates.PermissionsRate.PermissionsRateDetalis>> {
                                    ["iqrates.gg"]
                                    = new List<PluginSettings.Rates.PermissionsRate.PermissionsRateDetalis> {
                                        new PluginSettings.Rates.PermissionsRate.PermissionsRateDetalis {
                                            Rate = 200.0f, Shortname = "wood",
                                        }
                                        , new PluginSettings.Rates.PermissionsRate.PermissionsRateDetalis {
                                            Rate = 200.0f, Shortname = "stones",
                                        }
                                    }
                                }
                                , NightRates = new Dictionary<string, List<PluginSettings.Rates.PermissionsRate.PermissionsRateDetalis>> {
                                    ["iqrates.gg"]
                                    = new List<PluginSettings.Rates.PermissionsRate.PermissionsRateDetalis> {
                                        new PluginSettings.Rates.PermissionsRate.PermissionsRateDetalis {
                                            Rate = 400.0f, Shortname = "wood",
                                        }
                                        , new PluginSettings.Rates.PermissionsRate.PermissionsRateDetalis {
                                            Rate = 400.0f, Shortname = "stones",
                                        }
                                    }
                                }
                                ,
                            }
                            , PrivilegyRates = new Dictionary<string, PluginSettings.Rates.DayAnNightRate> {
                                ["iqrates.vip"]
                                = new PluginSettings.Rates.DayAnNightRate {
                                    DayRates = {
                                        GatherRate = 3.0f, LootRate = 3.0f, PickUpRate = 3.0f, QuarryRate = 3.0f, GrowableRate = 3.0f, ExcavatorRate = 3.0f, CoalRare = 15,
                                    }
                                    , NightRates = new PluginSettings.Rates.AllRates {
                                        GatherRate = 13.0f, LootRate = 13.0f, PickUpRate = 13.0f, GrowableRate = 13.0f, QuarryRate = 13.0f, ExcavatorRate = 13.0f, CoalRare = 25,
                                    }
                                }
                                , ["iqrates.premium"] = new PluginSettings.Rates.DayAnNightRate {
                                    DayRates = {
                                        GatherRate = 3.5f, LootRate = 3.5f, PickUpRate = 3.5f, GrowableRate = 3.5f, QuarryRate = 3.5f, ExcavatorRate = 3.5f, CoalRare = 20,
                                    }
                                    , NightRates = new PluginSettings.Rates.AllRates {
                                        GatherRate = 13.5f, LootRate = 13.5f, PickUpRate = 13.5f, GrowableRate = 13.5f, QuarryRate = 13.5f, ExcavatorRate = 13.5f, CoalRare = 20,
                                    }
                                }
                                ,
                            }
                            , BlackList = new List<String> {
                                "sulfur.ore",
                            }
                            ,
                        }
                        , OtherSetting = new PluginSettings.OtherSettings {
                            UseAlertDayNight = true, UseSkipTime = true, TypeSkipped = SkipType.Night, UseTime = false, FreezeTime = 12, UseFreezeTime = true, DayStart = 10, NightStart = 22, DayTime = 5, NightTime = 1, FuelConsumedTransportSetting = new PluginSettings.OtherSettings.FuelConsumedTransport {
                                ConsumedHotAirBalloon = 0.25f, ConsumedSnowmobile = 0.15f, ConsumedTrain = 0.15f, ConsumedBoat = 0.25f, ConsumedSubmarine = 0.15f, ConsumedCopter = 0.25f, ConsumedScrapTransport = 0.25f,
                            }
                            , FuelSetting = new PluginSettings.OtherSettings.FuelSettings {
                                AmountBoat = 200, AmountMinicopter = 200, AmountScrapTransport = 200, AmountSubmarine = 200
                            }
                            , EventSetting = new PluginSettings.OtherSettings.EventSettings {
                                BreadlaySetting = new PluginSettings.OtherSettings.EventSettings.Setting {
                                    FullOff = false, UseEventCustom = true, EventSpawnTime = 3000, RandomTimeSpawn = new PluginSettings.OtherSettings.EventSettings.Setting.RandomingTime {
                                        UseRandomTime = false, MaxEventSpawnTime = 3000, MinEventSpawnTime = 1000,
                                    }
                                    ,
                                }
                                , CargoPlaneSetting = new PluginSettings.OtherSettings.EventSettings.Setting {
                                    FullOff = false, UseEventCustom = true, EventSpawnTime = 5000, RandomTimeSpawn = new PluginSettings.OtherSettings.EventSettings.Setting.RandomingTime {
                                        UseRandomTime = false, MaxEventSpawnTime = 3000, MinEventSpawnTime = 1000,
                                    }
                                    ,
                                }
                                , CargoShipSetting = new PluginSettings.OtherSettings.EventSettings.Setting {
                                    FullOff = false, UseEventCustom = true, EventSpawnTime = 0, RandomTimeSpawn = new PluginSettings.OtherSettings.EventSettings.Setting.RandomingTime {
                                        UseRandomTime = true, MaxEventSpawnTime = 3000, MinEventSpawnTime = 8000,
                                    }
                                    ,
                                }
                                , ChinoockSetting = new PluginSettings.OtherSettings.EventSettings.Setting {
                                    FullOff = true, UseEventCustom = false, EventSpawnTime = 3000, RandomTimeSpawn = new PluginSettings.OtherSettings.EventSettings.Setting.RandomingTime {
                                        UseRandomTime = false, MaxEventSpawnTime = 3000, MinEventSpawnTime = 1000,
                                    }
                                    ,
                                }
                                , HelicopterSetting = new PluginSettings.OtherSettings.EventSettings.Setting {
                                    FullOff = true, UseEventCustom = false, EventSpawnTime = 3000, RandomTimeSpawn = new PluginSettings.OtherSettings.EventSettings.Setting.RandomingTime {
                                        UseRandomTime = false, MaxEventSpawnTime = 3000, MinEventSpawnTime = 1000,
                                    }
                                    ,
                                }
                                ,
                            }
                        }
                        ,
                    }
                }
                ;
            }
            [JsonProperty(LanguageEn ? "Plugin setup" : "Настройка плагина")]
            public PluginSettings pluginSettings = new PluginSettings();
        }
        public string GetLang(string LangKey, string userID = null, params object[] args) {
            sb.Clear();
            if (args != null) {
                sb.AppendFormat(lang.GetMessage(LangKey, this, userID), args);
                return sb.ToString();
            }
            return lang.GetMessage(LangKey, this, userID);
        }
        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 void FuelSystemRating(EntityFuelSystem FuelSystem, Int32 Amount) {
            if (FuelSystem == null) return;
            NextTick(() => {
                Item Fuel = FuelSystem.GetFuelItem();
                if (Fuel == null) return;
                if (Fuel.amount == 50 || Fuel.amount == 100) Fuel.amount = Amount;
            }
            );
        }
        enum Types {
            Gather, Loot, PickUP, Quarry, Excavator, Growable,
        }
        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(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();
            }
            );
        }
        protected override void LoadDefaultConfig() => config = Configuration.GetNewConfiguration();
        private MonumentInfo SpacePort;
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config == null) LoadDefaultConfig();
                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
                        }
                        ,
                    }
                    ;
                }
            }
            catch {
                PrintWarning(LanguageEn ? "Error #358543" + $"read configuration 'oxide/config/{Name}', create a new configuration!!" : "Ошибка #358543" + $"чтения конфигурации 'oxide/config/{Name}', создаём новую конфигурацию!!");
                //#333
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
        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();
                    }
                    );
                }
                );
            }
            );
        }
        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);
            }
        }
        private BasePlayer ExcavatorPlayer = null;
        void OnContainerDropItems(ItemContainer container) {
            if (container == null) return;
            var Container = container.entityOwner as LootContainer;
            if (Container == null) return;
            uint NetID = Container.net.ID;
            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);
        }
        UInt64? GetQuarryPlayer(UInt64 NetID) {
            if (!DataQuarryPlayer.ContainsKey(NetID)) return null;
            if (DataQuarryPlayer[NetID] == 0) return null;
            return DataQuarryPlayer[NetID];
        }
        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;
            }
        }
        private void OnEntitySpawned(Snowmobile snowmobiles) {
            if (snowmobiles == null) return;
            snowmobiles.maxFuelPerSec = config.pluginSettings.OtherSetting.FuelConsumedTransportSetting.ConsumedSnowmobile;
        }
        void WriteData() => Oxide.Core.Interface.Oxide.DataFileSystem.WriteObject("IQSystem/IQRates/Quarrys", DataQuarryPlayer);
        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);
                }
                );
            }
        }
        private void Init() => ReadData();
        private object OnExcavatorGather(ExcavatorArm arm, Item item) {
            if (arm == null) return null;
            if (item == null) return null;
            item.amount = Converted(Types.Excavator, item.info.shortname, item.amount, ExcavatorPlayer);
            return null;
        }
        bool IsBlackListBurnable(string Shortname) {
            var BlackList = config.pluginSettings.RateSetting.BlackListBurnable;
            if (BlackList.Contains(Shortname)) return true;
            else return false;
        }
        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");
        }
        /// <summary>
        /// Обновление 1.4.8
        /// - Исправлены рейты на трупы NPC после обновления игры
        /// - Корректировки в методе со скоростью плавки печей
        /// - Добавлен черный список префабов (указывайте короткое имя префаба) - на которые не будут дейстовать рейтинги
        /// - Корректировка скорости плавки
        /// - Рейтинги по привилегиям на карьеры будут работать в оффлайн
        [PluginReference]
        Plugin IQChat;
        private class OvenController : FacepunchBehaviour {
            private static readonly Dictionary<BaseOven, OvenController> Controllers = new Dictionary<BaseOven, OvenController>();
            private BaseOven _oven;
            private float _speed;
            private string _ownerId;
            private Int32 _ticks;
            private Int32 _speedFuel;
            private bool IsFurnace => (int)_oven.temperature >= 2;
            private void Awake() {
                _oven = (BaseOven)gameObject.ToBaseEntity();
                _ownerId = _oven.OwnerID.ToString();
            }
            public object Switch(BasePlayer player) {
                if (!IsFurnace || _oven.needsBuildingPrivilegeToUse && !player.CanBuild()) return null;
                if (_oven.IsOn()) StopCooking();
                else {
                    _ownerId = _oven.OwnerID != 0 ? _oven.OwnerID.ToString() : player.UserIDString;
                    StartCooking();
                }
                return false;
            }
            public void TryRestart() {
                if (!_oven.IsOn()) return;
                _oven.CancelInvoke(_oven.Cook);
                StopCooking();
                StartCooking();
            }
            private void Kill() {
                if (_oven.IsOn()) {
                    StopCooking();
                    _oven.StartCooking();
                }
                Destroy(
// ... [Code preview truncated due to length. Full source in attached file] ...

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