C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using UnityEngine;
using System.Text;
using System.Collections;
using Facepunch;
using Oxide.Core.Plugins;
namespace Oxide.Plugins {
/* Плагин был разыгран дискордом https://discord.gg/8CWJadmA5w */
[Info("IQRates", "https://discord.gg/8CWJadmA5w", "1.8.24")]
[Description("Настройка рейтинга на сервере")]
class IQRates : RustPlugin {
private class Configuration {
[JsonProperty(LanguageEn ? "Plugin setup" : "Настройка плагина")]
public PluginSettings pluginSettings = new PluginSettings();
internal class PluginSettings {
[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 ? "Select the type of sheet to use: 0 - White sheet, 1 - Black sheet (White sheet - the ratings of only those items that are in it increase, the rest are ignored | The Black sheet is completely the opposite)" : "Выберите тип используемого листа : 0 - Белый лист, 1 - Черный лист (Белый лист - увеличиваются рейтинги только тех предметов - которые в нем, остальные игнорируются | Черный лист полностью наоборот)")]
public TypeListUsed TypeList = TypeListUsed.BlackList;
[JsonProperty(LanguageEn ? "Black list of items that will not be categorically affected by the rating" : "Черный лист предметов,на которые катигорично не будут действовать рейтинг")]
public List<String> BlackList = new List<String>();
[JsonProperty(LanguageEn ? "A white list of items that will ONLY be affected by ratings - the rest is ignored" : "Белый лист предметов, на которые ТОЛЬКО будут действовать рейтинги - остальное игнорируются")]
public List<String> WhiteList = new List<String>();
[JsonProperty(LanguageEn ? "A blacklist of categories that will NOT be affected by ratings" : "Черный список категорий на которые НЕ БУДУТ действовать рейтинги")]
public List<String> BlackListCategory = new List<String>();
[JsonProperty(LanguageEn ? "Use a tea controller? (Works on scrap, ore and wood tea).If enabled, it will set % to production due to the difference between rates (standard / privileges)" : "Использовать контроллер чая? (Работае на скрап, рудный и древесный чай).Если включено - будет устанавливать % к добычи за счет разницы между рейтами (стандартный / привилегии)")]
public Boolean UseTeaController;
[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 ? "Use a blacklist of items for melting?" : "Использовать черный список предметов для плавки?")]
public Boolean UseBlackListBurnable = false;
[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 ? "Detailed rating settings in the career" : "Детальная настройка рейтинга в карьере")]
public QuarryRateDetalis QuarryDetalis = new QuarryRateDetalis();
[JsonProperty(LanguageEn ? "Excavator Rating" : "Рейтинг экскаватора")]
public Single ExcavatorRate;
[JsonProperty(LanguageEn ? "Coal drop chance" : "Шанс выпадения угля")]
public Single CoalRare;
internal class QuarryRateDetalis {
[JsonProperty(LanguageEn ? "Use the detailed setting of the career rating (otherwise the 'Career Rating' will be taken for all subjects)" : "Использовать детальную настройку рейтинга карьеров (иначе будет браться 'Рейтинг карьеров' для всех предметов)")]
public Boolean UseDetalisRateQuarry;
[JsonProperty(LanguageEn ? "The item dropped out of the career - rating" : "Предмет выпадаемый из карьера - рейтинг")]
public Dictionary<String, Single> ShortnameListQuarry = new Dictionary<String, Single>();
}
}
}
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 <Frozen time on the server>)" : "Использовать заморозку времени(время будет такое, какое вы установите в пунке <Замороженное время на сервере>)")]
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 <Use time freeze>" : "Замороженное время на сервере (Установите время, которое не будет изменяться и будет вечно на сервере, должен быть 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;
}
}
}
}
internal class ReferencePlugin {
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 ? "Setting up IQChat" : "Настройка IQChat")]
public IQChatReference IQChatSetting = new IQChatReference();
}
[JsonProperty(LanguageEn ? "Rating settings" : "Настройка рейтингов")]
public Rates RateSetting = new Rates();
[JsonProperty(LanguageEn ? "Additional plugin settings" : "Дополнительная настройка плагина")]
public OtherSettings OtherSetting = new OtherSettings();
}
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 = "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, QuarryDetalis = new PluginSettings.Rates.AllRates.QuarryRateDetalis {
UseDetalisRateQuarry = false, ShortnameListQuarry = new Dictionary<String, Single>() {
["metal.ore"]
= 10, ["sulfur.ore"] = 5
}
}
, 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, QuarryDetalis = new PluginSettings.Rates.AllRates.QuarryRateDetalis {
UseDetalisRateQuarry = false, ShortnameListQuarry = new Dictionary<String, Single>() {
["metal.ore"]
= 10, ["sulfur.ore"] = 5
}
}
, 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, QuarryDetalis = new PluginSettings.Rates.AllRates.QuarryRateDetalis {
UseDetalisRateQuarry = false, ShortnameListQuarry = new Dictionary<String, Single>() {
["metal.ore"]
= 10, ["sulfur.ore"] = 5
}
}
, 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, QuarryDetalis = new PluginSettings.Rates.AllRates.QuarryRateDetalis {
UseDetalisRateQuarry = false, ShortnameListQuarry = new Dictionary<String, Single>() {
["metal.ore"]
= 10, ["sulfur.ore"] = 5
}
}
, 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, QuarryDetalis = new PluginSettings.Rates.AllRates.QuarryRateDetalis {
UseDetalisRateQuarry = false, ShortnameListQuarry = new Dictionary<String, Single>() {
["metal.ore"]
= 10, ["sulfur.ore"] = 5
}
}
, 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, QuarryDetalis = new PluginSettings.Rates.AllRates.QuarryRateDetalis {
UseDetalisRateQuarry = false, ShortnameListQuarry = new Dictionary<String, Single>() {
["metal.ore"]
= 10, ["sulfur.ore"] = 5
}
}
, 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,
}
,
}
,
}
}
,
}
}
;
}
}
private void OnEntitySpawned(BaseHelicopter entity) {
NextTick(() => {
if (entity.OwnerID != 0 || entity.skinID != 0) return;
var EvenTimer = config.pluginSettings.OtherSetting.EventSetting.HelicopterSetting;
if ((EvenTimer.FullOff || EvenTimer.UseEventCustom)) entity.Kill();
}
);
}
void ReadData() => DataQuarryPlayer = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Dictionary<UInt64, UInt64>>("IQSystem/IQRates/Quarrys");
private void OnEntitySpawned(SupplySignal entity) => UnSubProSub(10);
void SpawnCargo() {
UnSubProSub();
var cargoShip = GameManager.server.CreateEntity(prefabShip) as CargoShip;
if (cargoShip == null) return;
cargoShip.TriggeredEventSpawn();
cargoShip.SendNetworkUpdate();
cargoShip.RefreshActiveLayout();
cargoShip.Spawn();
}
public List<UInt64> LootersListCrateID = new List<UInt64>();
private void OnEntitySpawned(MiniCopter copter) {
if (copter == null) return;
FuelSystemRating(copter.GetFuelSystem(), config.pluginSettings.OtherSetting.FuelSetting.AmountMinicopter);
copter.fuelPerSec = config.pluginSettings.OtherSetting.FuelConsumedTransportSetting.ConsumedCopter;
}
protected override void LoadDefaultConfig() => config = Configuration.GetNewConfiguration();
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;
}
}
protected override void SaveConfig() => Config.WriteObject(config);
[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);
}
public Dictionary<BasePlayer, Single> BonusRates = new Dictionary<BasePlayer, Single>();
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;
}
enum Types {
Gather, Loot, PickUP, Quarry, Excavator, Growable,
}
private void OnEntitySpawned(TrainCar trainCar) {
if (trainCar == null) return;
StorageContainer fuelContainer = trainCar.GetFuelSystem()?.GetFuelContainer();
if (fuelContainer == null) return;
TrainEngine trainEngine = fuelContainer.GetComponent<TrainEngine>();
if (trainEngine == null) return;
trainEngine.maxFuelPerSec = config.pluginSettings.OtherSetting.FuelConsumedTransportSetting.ConsumedTrain;
}
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);
}
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();
}
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(this);
}
public static OvenController GetOrAdd(BaseOven oven) {
OvenController controller;
if (Controllers.TryGetValue(oven, out controller)) return controller;
controller = oven.gameObject.AddComponent<OvenController>();
Controllers[oven] = controller;
return controller;
}
public static void TryRestartAll() {
foreach (var pair in Controllers) {
pair.Value.TryRestart();
}
}
public static void KillAll() {
foreach (var pair in Controllers) {
pair.Value.Kill();
}
Controllers.Clear();
}
public void OnDestroy() {
Destroy(this);
}
private void StartCooking() {
if(_oven.IndustrialMode != BaseOven.IndustrialSlotMode.ElectricFurnace) if (_oven.FindBurnable() == null) return;
Single Multiplace = _.GetMultiplaceBurnableSpeed(_ownerId);
_speed = (Single)(0.5f / Multiplace);
// 0.5 * M
Int32 MultiplaceFuel = _.GetMultiplaceBurnableFuelSpeed(_ownerId);
_speedFuel = MultiplaceFuel;
StopCooking();
_oven.inventory.temperature = _oven.cookingTemperature;
_oven.UpdateAttachmentTemperature();
InvokeRepeating(Cook, _speed, _speed);
_oven.SetFlag(BaseEntity.Flags.On, true);
}
private void StopCooking() {
CancelInvoke(Cook);
_oven.StopCooking();
_oven.SetFlag(BaseEntity.Flags.On, false);
_oven.SendNetworkUpdate();
if (_oven.inventory != null) {
foreach (Item item in _oven.inventory.itemList) {
if (item.HasFlag(global : : Item.Flag.Cooking)) item.SetFlag(global : : Item.Flag.Cooking, false);
item.MarkDirty();
}
}
}
public void Cook() {
if (!_oven.HasFlag(BaseEntity.Flags.On)) {
StopCooking();
return;
}
Item item = _oven.FindBurnable();
if (_oven.IndustrialMode != BaseOven.IndustrialSlotMode.ElectricFurnace) {
if (item == null) {
StopCooking();
return;
}
}
_oven.Cook();
SmeltItems();
if (_oven.IndustrialMode != BaseOven.IndustrialSlotMode.ElectricFurnace) {
var component = item.info.GetComponent<ItemModBurnable>();
item.fuel -= 0.5f * (_oven.cookingTemperature / 200f) * _speedFuel;
if (!item.HasFlag(global : : Item.Flag.OnFire)) {
item.SetFlag(global : : Item.Flag.OnFire, true);
item.MarkDirty();
}
if (item.fuel <= 0f) {
_oven.ConsumeFuel(item, component);
}
}
_ticks++;
}
private void SmeltItems() {
if (_ticks % 1 != 0) return;
for (var i = 0; i < _oven.inventory.itemList.Count; i++) {
var item = _oven.inventory.itemList[i];
if (item == null || !item.IsValid() || item.info == null) continue;
var cookable = item.info.GetComponent<ItemModCookable>();
if (cookable == null) continue;
if (_.IsBlackListBurnable(item.info.shortname)) continue;
Single temperature = item.temperature;
if ((temperature < cookable.lowTemp || temperature > cookable.highTemp)) {
if (!cookable.setCookingFlag || !item.HasFlag(global : : Item.Flag.Cooking)) continue;
item.SetFlag(global : : Item.Flag.Cooking, false);
item.MarkDirty();
continue;
}
if (!cookable.CanBeCookedByAtTemperature(temperature) && _.IsBlackListBurnable(item.info.shortname)) {
if (!cookable.setCookingFlag || !item.HasFlag(global : : Item.Flag.Cooking)) continue;
item.SetFlag(global : : Item.Flag.Cooking, false);
item.MarkDirty();
continue;
}
if (cookable.cookTime > 0 && _ticks * 1f / 1 % cookable.cookTime > 0) continue;
if (cookable.setCookingFlag && !item.HasF
// ... [Code preview truncated due to length. Full source in attached file] ...