C#:
using System;
using System.Collections;
using System.Collections.Generic;
using Facepunch;
using UnityEngine;
using UnityEngine.AI;
using Oxide.Core;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.IO;
using UnityEngine.Networking;
using Oxide.Plugins.TriangulationExtensionMethods;
namespace Oxide.Plugins {
[Info("Triangulation", "KpucTaJl", "1.1.1")]
internal class Triangulation : RustPlugin {
#region Config
private const bool En = false;
private PluginConfig _config;
protected override void LoadDefaultConfig() {
Puts("Creating a default config...");
_config = PluginConfig.DefaultConfig();
_config.PluginVersion = Version;
SaveConfig();
Puts("Creation of the default config completed!");
}
protected override void LoadConfig() {
base.LoadConfig();
_config = Config.ReadObject<PluginConfig>();
if (_config.PluginVersion < Version) UpdateConfigValues();
}
private void UpdateConfigValues() {
Puts("Config update detected! Updating config values...");
if (_config.PluginVersion < new VersionNumber(1, 0, 2)) {
_config.CooldownOwner = 86400;
}
if (_config.PluginVersion < new VersionNumber(1, 0, 7)) {
_config.SkillTree = false;
_config.XPerience = false;
_config.RustRewards = false;
}
_config.PluginVersion = Version;
Puts("Config update completed!");
SaveConfig();
}
protected override void SaveConfig() => Config.WriteObject(_config);
public class ItemConfig {
[JsonProperty("ShortName")]
public string ShortName {
get;
set;
}
[JsonProperty(En ? "Minimum" : "Минимальное кол-во")]
public int MinAmount {
get;
set;
}
[JsonProperty(En ? "Maximum" : "Максимальное кол-во")]
public int MaxAmount {
get;
set;
}
[JsonProperty(En ? "Chance [0.0-100.0]" : "Шанс выпадения предмета [0.0-100.0]")]
public float Chance {
get;
set;
}
[JsonProperty(En ? "Give blueprint? [true/false]" : "Это чертеж? [true/false]")]
public bool IsBluePrint {
get;
set;
}
[JsonProperty("SkinID (0 = default)")]
public ulong SkinId {
get;
set;
}
[JsonProperty(En ? "Name (empty = default)" : "Название (empty - default)")]
public string Name {
get;
set;
}
}
public class LootTableConfig {
[JsonProperty(En ? "Minimum items" : "Минимальное кол-во элементов")]
public int Min {
get;
set;
}
[JsonProperty(En ? "Maximum items" : "Максимальное кол-во элементов")]
public int Max {
get;
set;
}
[JsonProperty(En ? "Enforce minimum and maximum values? [true/false]" : "Использовать минимальное и максимальное значение? [true/false]")]
public bool UseCount {
get;
set;
}
[JsonProperty(En ? "List of items" : "Список предметов")]
public List<ItemConfig> Items {
get;
set;
}
}
public class PrefabConfig {
[JsonProperty(En ? "Chance [0.0-100.0]" : "Шанс выпадения [0.0-100.0]")]
public float Chance {
get;
set;
}
[JsonProperty(En ? "The path to the prefab (Entity full name)" : "Путь к prefab-у")]
public string PrefabDefinition {
get;
set;
}
}
public class PrefabLootTableConfig {
[JsonProperty(En ? "Minimum numbers of prefabs" : "Минимальное кол-во prefab-ов")]
public int Min {
get;
set;
}
[JsonProperty(En ? "Maximum numbers of prefabs" : "Максимальное кол-во prefab-ов")]
public int Max {
get;
set;
}
[JsonProperty(En ? "Enforce minimum and maximum values? [true/false]" : "Использовать минимальное и максимальное значение? [true/false]")]
public bool UseCount {
get;
set;
}
[JsonProperty(En ? "List of prefabs (Entity full names)" : "Список prefab-ов")]
public List<PrefabConfig> Prefabs {
get;
set;
}
}
public class LootTable {
[JsonProperty(En ? "Which loot table should the plugin use? (0 - own custom table; 1 - Rust prefab loot table; 2 - combine both 0 & 1 tables)" : "Какую таблицу лута необходимо использовать? (0 - собственную; 1 - таблица предметов объектов Rust; 2 - совместить 0 и 1 методы)")]
public int TypeLootTable {
get;
set;
}
[JsonProperty(En ? "Rust prefab loot table (if the loot table type is 1 or 2)" : "Таблица предметов из prefab-ов (если тип таблицы предметов - 1 или 2)")]
public PrefabLootTableConfig PrefabLootTable {
get;
set;
}
[JsonProperty(En ? "Own custom table (if the loot table type is 0 or 2)" : "Собственная таблица предметов (если тип таблицы предметов - 0 или 2)")]
public LootTableConfig OwnLootTable {
get;
set;
}
}
public class ColorConfig {
[JsonProperty("r")]
public float R {
get;
set;
}
[JsonProperty("g")]
public float G {
get;
set;
}
[JsonProperty("b")]
public float B {
get;
set;
}
}
public class MarkerConfig {
[JsonProperty(En ? "Use map marker? [true/false]" : "Использовать маркер на карте? [true/false]")]
public bool Enabled {
get;
set;
}
[JsonProperty(En ? "Type (0 - simple, 1 - advanced)" : "Тип (0 - упрощенный, 1 - расширенный)")]
public int Type {
get;
set;
}
[JsonProperty(En ? "Background radius (if the marker type is 0)" : "Радиус фона (если тип маркера - 0)")]
public float Radius {
get;
set;
}
[JsonProperty(En ? "Background transparency" : "Прозрачность фона")]
public float Alpha {
get;
set;
}
[JsonProperty(En ? "Color" : "Цвет")]
public ColorConfig Color {
get;
set;
}
[JsonProperty(En ? "Text" : "Текст")]
public string Text {
get;
set;
}
}
public class PointConfig {
[JsonProperty(En ? "Enabled? [true/false]" : "Включен? [true/false]")]
public bool Enabled {
get;
set;
}
[JsonProperty(En ? "Text" : "Текст")]
public string Text {
get;
set;
}
[JsonProperty(En ? "Size" : "Размер")]
public int Size {
get;
set;
}
[JsonProperty(En ? "Color" : "Цвет")]
public string Color {
get;
set;
}
}
public class GuiConfig {
[JsonProperty(En ? "Use the GUI? [true/false]" : "Использовать ли GUI? [true/false]")]
public bool IsGui {
get;
set;
}
[JsonProperty("OffsetMin Y")]
public string OffsetMinY {
get;
set;
}
}
public class ChatConfig {
[JsonProperty(En ? "Use chat messages? [true/false]" : "Использовать ли чат? [true/false]")]
public bool IsChat {
get;
set;
}
[JsonProperty(En ? "Prefix for chat messages" : "Префикс сообщений в чате")]
public string Prefix {
get;
set;
}
}
public class GameTipConfig {
[JsonProperty(En ? "Use Facepunch Game Tips (notification bar above hotbar)? [true/false]" : "Использовать ли Facepunch Game Tip (оповещения над слотами быстрого доступа игрока)? [true/false]")]
public bool IsGameTip {
get;
set;
}
[JsonProperty(En ? "Style (0 - Blue Normal, 1 - Red Normal, 2 - Blue Long, 3 - Blue Short, 4 - Server Event)" : "Стиль (0 - Blue Normal, 1 - Red Normal, 2 - Blue Long, 3 - Blue Short, 4 - Server Event)")]
public int Style {
get;
set;
}
}
public class GuiAnnouncementsConfig {
[JsonProperty(En ? "Do you use the plugin GUIAnnouncements? [true/false]" : "Использовать ли GUIAnnouncements? [true/false]")]
public bool IsGuiAnnouncements {
get;
set;
}
[JsonProperty(En ? "Banner color" : "Цвет баннера")]
public string BannerColor {
get;
set;
}
[JsonProperty(En ? "Text color" : "Цвет текста")]
public string TextColor {
get;
set;
}
[JsonProperty(En ? "Adjust Vertical Position" : "Отступ от верхнего края")]
public float ApiAdjustVPosition {
get;
set;
}
}
public class NotifyConfig {
[JsonProperty(En ? "Do you use the plugin Notify? [true/false]" : "Использовать ли Notify? [true/false]")]
public bool IsNotify {
get;
set;
}
[JsonProperty(En ? "Type" : "Тип")]
public int Type {
get;
set;
}
}
public class DiscordConfig {
[JsonProperty(En ? "Do you use the plugin DiscordMessages? [true/false]" : "Использовать ли DiscordMessages? [true/false]")]
public bool IsDiscord {
get;
set;
}
[JsonProperty("Webhook URL")]
public string WebhookUrl {
get;
set;
}
[JsonProperty(En ? "Embed Color (DECIMAL)" : "Цвет полосы (DECIMAL)")]
public int EmbedColor {
get;
set;
}
[JsonProperty(En ? "Keys of required messages" : "Ключи необходимых сообщений")]
public HashSet<string> Keys {
get;
set;
}
}
public class EconomyConfig {
[JsonProperty(En ? "Which economy plugins do you want to use? (Economics, ServerRewards, IQEconomic, XPerience)" : "Какие плагины экономики вы хотите использовать? (Economics, ServerRewards, IQEconomic, XPerience)")]
public HashSet<string> Plugins {
get;
set;
}
[JsonProperty(En ? "The minimum value that a player must collect to get economy reward" : "Минимальное значение, которое игрок должен заработать, чтобы получить баллы за экономику")]
public double Min {
get;
set;
}
[JsonProperty(En ? "Killing animals" : "Убийство животных")]
public Dictionary<string, double> Animals {
get;
set;
}
[JsonProperty(En ? "Start scanning on the signal receiver" : "Начало сканирования на приемнике сигнала")]
public double StartScan {
get;
set;
}
[JsonProperty(En ? "List of commands that are executed in server console at the end of the event ({steamid} - the player who collected the highest number of points)" : "Список команд, которые выполняются в консоли по окончанию ивента ({steamid} - игрок, который набрал наибольшее кол-во баллов)")]
public HashSet<string> Commands {
get;
set;
}
}
public class AnimalConfig {
[JsonProperty(En ? "Type (1 - Polar Bear, 2 - Bear, 3 - Wolf, 4 - Boar, 5 - Stag, 6 - Chicken)" : "Тип (1 - Полярный медведь, 2 - Медведь, 3 - Волк, 4 - Кабан, 5 - Олень, 6 - Курица)")]
public int Type {
get;
set;
}
[JsonProperty(En ? "Can an animal attack players? [true/false]" : "Может ли атаковать игроков? [true/false]")]
public bool CanAttackPlayer {
get;
set;
}
[JsonProperty(En ? "Health" : "Кол-во ХП")]
public float Health {
get;
set;
}
[JsonProperty(En ? "Attack Range" : "Радиус атаки")]
public float AttackRange {
get;
set;
}
[JsonProperty(En ? "Attack Damage" : "Урон от атаки")]
public float AttackDamage {
get;
set;
}
[JsonProperty(En ? "Animal damage each second to signal receiver" : "Кол-во урона по приемнику сигнала в секунду")]
public float DamagePerSec {
get;
set;
}
[JsonProperty(En ? "Attack Rate [sec.]" : "Минимальное время между атаками [sec.]")]
public float AttackRate {
get;
set;
}
[JsonProperty(En ? "Speed" : "Скорость")]
public float Speed {
get;
set;
}
}
public class AmountConfig {
[JsonProperty(En ? "Chance probability [0.0-100.0]" : "Шанс [0.0-100.0]")]
public float Chance {
get;
set;
}
[JsonProperty(En ? "Count" : "Кол-во")]
public int Count {
get;
set;
}
}
public class PresetConfig {
[JsonProperty(En ? "ShortName of the animal preset" : "ShortName набора животного")]
public string ShortName {
get;
set;
}
[JsonProperty(En ? "Setting number of animals depending on probability" : "Настройка кол-ва животных в зависимoсти от вероятности")]
public HashSet<AmountConfig> ListAmountConfig {
get;
set;
}
}
public class WaveConfig {
[JsonProperty(En ? "Level" : "Уровень")]
public int Level {
get;
set;
}
[JsonProperty(En ? "Preparation time [sec.]" : "Время подготовки [sec.]")]
public int TimeToStart {
get;
set;
}
[JsonProperty(En ? "Duration [sec.]" : "Длительность [sec.]")]
public int Duration {
get;
set;
}
[JsonProperty(En ? "Time until appearance of new animals [sec.]" : "Время появления новых животных [sec.]")]
public int TimerAnimal {
get;
set;
}
[JsonProperty(En ? "Animal sets" : "Наборы животных")]
public HashSet<PresetConfig> Presets {
get;
set;
}
}
public class ReceiverConfig {
[JsonProperty(En ? "Health" : "Кол-во ХП")]
public float Health {
get;
set;
}
[JsonProperty(En ? "Health to get one battery" : "Кол-во ХП для получения одной батарейки")]
public float HealthPerBattery {
get;
set;
}
[JsonProperty(En ? "The loot table in crate at the end of the scan" : "Таблица предметов в ящике при завершении сканирования")]
public LootTable Loot {
get;
set;
}
[JsonProperty(En ? "List of attack waves" : "Список волн атаки")]
public HashSet<WaveConfig> Waves {
get;
set;
}
}
public class DrillConfig {
[JsonProperty(En ? "The operating time of the drilling rig from each battery [sec.]" : "Время работы от одной батарейки [sec.]")]
public int WorkingTimePerBattery {
get;
set;
}
[JsonProperty(En ? "Maximum operating time [sec.]" : "Максимальное время работы [sec.]")]
public int MaxWorkingTime {
get;
set;
}
[JsonProperty(En ? "Lifetime [sec.]" : "Время существования [sec.]")]
public int LifeTime {
get;
set;
}
[JsonProperty(En ? "The duration of item acquisition cycle [sec.]" : "Продолжительность цикла получения предметов [sec.]")]
public int CycleTime {
get;
set;
}
[JsonProperty(En ? "Loot table for one item acquisition cycle" : "Таблица предметов для одного цикла получения предметов")]
public LootTable Loot {
get;
set;
}
}
public class LocationConfig {
[JsonProperty(En ? "Position of the signal receiver or drilling rig" : "Позиция приемника сигнала или буровой установки")]
public string Main {
get;
set;
}
[JsonProperty(En ? "List of positions for animals (if it is a signal receiver)" : "Список позиций для животных (если это приемник сигнала)")]
public HashSet<string> Animals {
get;
set;
}
}
public class MonumentConfig {
[JsonProperty(En ? "Name of monument" : "Название монумента")]
public string Name {
get;
set;
}
[JsonProperty(En ? "List of locations" : "Список расположений")]
public HashSet<LocationConfig> Locations {
get;
set;
}
}
public class SpawnConfig {
[JsonProperty(En ? "What type of event appearance? (0 - random, 1 - standard monuments, 2 - custom monuments, 3 - combine 1 & 2 both, 4 - random but will default to 3 if no location is found)" : "Какой тип появления ивента необходимо использовать? (0 - рандомный, 1 - стандартные монументы, 2 - кастомные монументы, 3 - совместить 1 и 2 методы, 4 - рандомный, но если позиция не найдена, то 3 метод)")]
public int Type {
get;
set;
}
[JsonProperty(En ? "List of biomes for the appearance of the event" : "Список биомов для появления ивента")]
public HashSet<string> Biomes {
get;
set;
}
[JsonProperty(En ? "List of positions on standard monuments (all positions are relative to the monument)" : "Список позиций на стандартных монументах (все позиции являются локальными относительно монумента)")]
public HashSet<MonumentConfig> Monuments {
get;
set;
}
[JsonProperty(En ? "List of positions on custom monuments (all positions are relative to map)" : "Список позиций на кастомных монументах (все позиции являются глобальными на карте)")]
public HashSet<LocationConfig> CustomMonuments {
get;
set;
}
}
private class PluginConfig {
[JsonProperty(En ? "Minimum time between events [sec.]" : "Минимальное время между ивентами [sec.]")]
public float MinStartTime {
get;
set;
}
[JsonProperty(En ? "Maximum time between events [sec.]" : "Максимальное время между ивентами [sec.]")]
public float MaxStartTime {
get;
set;
}
[JsonProperty(En ? "Use minimum and maximum event start values? [true/false]" : "Активен ли таймер для запуска ивента? [true/false]")]
public bool EnabledTimer {
get;
set;
}
[JsonProperty(En ? "Delay of event start from the command or timer running (starts when chat message appears) [sec.]" : "Время до начала ивента после сообщения в чате [sec.]")]
public float PreStartTime {
get;
set;
}
[JsonProperty(En ? "Waiting time for the scan to start after the signal receiver appears [sec.]" : "Время ожидания запуска сканирования после появления приемника сигнала [sec.]")]
public float ScanWaitTime {
get;
set;
}
[JsonProperty(En ? "Time until a new receiver or drilling machine appears (if all receivers have successfully completed scanning) [sec.]" : "Время до появления нового приемника или буровой машины (если все приемники успешно завершили сканирование) [sec.]")]
public float PreStartStage {
get;
set;
}
[JsonProperty(En ? "List of animal presets" : "Список наборов животных")]
public Dictionary<string, AnimalConfig> Presets {
get;
set;
}
[JsonProperty(En ? "Settings for the first receiver" : "Настройки для первого приемника")]
public ReceiverConfig FirstReceiver {
get;
set;
}
[JsonProperty(En ? "Settings for the second receiver" : "Настройки для второго приемника")]
public ReceiverConfig SecondReceiver {
get;
set;
}
[JsonProperty(En ? "Settings for the third receiver" : "Настройки для третьего приемника")]
public ReceiverConfig ThirdReceiver {
get;
set;
}
[JsonProperty(En ? "Drilling Rig Settings" : "Настройки для буровой установки")]
public DrillConfig Drill {
get;
set;
}
[JsonProperty(En ? "Marker configuration on the map" : "Настройка маркера на карте")]
public MarkerConfig Marker {
get;
set;
}
[JsonProperty(En ? "Marker settings for key event points shown on players screen" : "Настройки маркера на экране игрока")]
public PointConfig Point {
get;
set;
}
[JsonProperty(En ? "GUI setting" : "Настройки GUI")]
public GuiConfig Gui {
get;
set;
}
[JsonProperty(En ? "Chat Message setting" : "Настройки сообщений в чате")]
public ChatConfig Chat {
get;
set;
}
[JsonProperty(En ? "Facepunch Game Tips setting" : "Настройка сообщений Facepunch Game Tip")]
public GameTipConfig GameTip {
get;
set;
}
[JsonProperty(En ? "GUI Announcements setting (only for GUIAnnouncements plugin)" : "Настройка GUI Announcements (только для тех, кто использует плагин GUI Announcements)")]
public GuiAnnouncementsConfig GuiAnnouncements {
get;
set;
}
[JsonProperty(En ? "Notify setting (only for Notify plugin)" : "Настройка Notify (только для тех, кто использует плагин Notify)")]
public NotifyConfig Notify {
get;
set;
}
[JsonProperty(En ? "Discord setting (only for DiscordMessages plugin)" : "Настройка оповещений в Discord (только для тех, кто использует плагин Discord Messages)")]
public DiscordConfig Discord {
get;
set;
}
[JsonProperty(En ? "Do you create a PVP zone in the event area? (only for TruePVE plugin) [true/false]" : "Создавать зону PVP в зоне проведения ивента? (только для тех, кто использует плагин TruePVE) [true/false]")]
public bool IsCreateZonePvp {
get;
set;
}
[JsonProperty(En ? "Can a non-owner of the event loot the crates? [true/false]" : "Может ли не владелец ивента открывать ящики? [true/false]")]
public bool LootCrate {
get;
set;
}
[JsonProperty(En ? "Can a non-owner of the event deal damage to the animal? [true/false]" : "Может ли не владелец ивента наносить урон по животным? [true/false]")]
public bool DamageNpc {
get;
set;
}
[JsonProperty(En ? "Can an animal attack a non-owner of the event? [true/false]" : "Могут ли животные атаковать не владельца ивента? [true/false]")]
public bool TargetNpc {
get;
set;
}
[JsonProperty(En ? "Can a non-owner of the event turn on/off the drilling rig? [true/false]" : "Может ли не владелец ивента включать/отключать буровую установку? [true/false]")]
public bool SwitchDrill {
get;
set;
}
[JsonProperty(En ? "The time to save the status of the event owner for the second/third receiver of the signal after its appearance on the map" : "Время сохранения статуса владельца ивента на второй/третий приемник сигнала после его появления на карте [sec.]")]
public float OwnerTime {
get;
set;
}
[JsonProperty(En ? "Prevent the actions of the RestoreUponDeath plugin in the event zone? [true/false]" : "Запрещать работу плагина RestoreUponDeath в зоне действия ивента? [true/false]")]
public bool RestoreUponDeath {
get;
set;
}
[JsonProperty(En ? "The time that the player can`t become the Event Owner, after the end of the event and the player was its owner [sec.]" : "Время, которое игрок не сможет стать владельцем ивента, после того как ивент окончен и игрок был его владельцем [sec.]")]
public double CooldownOwner {
get;
set;
}
[JsonProperty(En ? "Interrupt teleporting in the event area? (only for users NTeleportation plugin) [true/false]" : "Запрещать телепорт в зоне проведения ивента? (только для тех, кто использует плагин NTeleportation) [true/false]")]
public bool NTeleportationInterrupt {
get;
set;
}
[JsonProperty(En ? "Economy setting (total values will be added up and rewarded at the end of the event)" : "Настройка экономики (конечное значение суммируется и будет выдано игрокам по окончанию ивента)")]
public EconomyConfig Economy {
get;
set;
}
[JsonProperty(En ? "List of commands banned in the event zone" : "Список команд запрещенных в зоне ивента")]
public HashSet<string> Commands {
get;
set;
}
[JsonProperty(En ? "Position settings for the event to appear on the map" : "Настройки позиций для появления ивента на карте")]
public SpawnConfig Spawn {
get;
set;
}
[JsonProperty(En ? "Should the Skill Tree plugin work inside the event area? [true/false]" : "Должен ли работать плагин Skill Tree внутри зоны ивента? [true/false]")]
public bool SkillTree {
get;
set;
}
[JsonProperty(En ? "Should the XPerience plugin work inside the event area? [true/false]" : "Должен ли работать плагин XPerience внутри зоны ивента? [true/false]")]
public bool XPerience {
get;
set;
}
[JsonProperty(En ? "Should the Rust Rewards plugin work inside the event area? [true/false]" : "Должен ли работать плагин Rust Rewards внутри зоны ивента? [true/false]")]
public bool RustRewards {
get;
set;
}
[JsonProperty(En ? "Configuration version" : "Версия конфигурации")]
public VersionNumber PluginVersion {
get;
set;
}
public static PluginConfig DefaultConfig() {
return new PluginConfig {
MinStartTime = 14400f, MaxStartTime = 14400f, EnabledTimer = true, PreStartTime = 300f, ScanWaitTime = 600f, PreStartStage = 60f, Presets = new Dictionary<string, AnimalConfig> {
["polarbear1"]
= new AnimalConfig {
Type = 1, CanAttackPlayer = true, Health = 500f, AttackRange = 2.5f, AttackDamage = 70f, DamagePerSec = 20f, AttackRate = 5f, Speed = 2f
}
, ["bear1"] = new AnimalConfig {
Type = 2, CanAttackPlayer = true, Health = 400f, AttackRange = 2.5f, AttackDamage = 50f, DamagePerSec = 15f, AttackRate = 4f, Speed = 2.5f
}
, ["wolf1"] = new AnimalConfig {
Type = 3, CanAttackPlayer = true, Health = 100f, AttackRange = 2f, AttackDamage = 50f, DamagePerSec = 10f, AttackRate = 2f, Speed = 11f
}
, ["boar1"] = new AnimalConfig {
Type = 4, CanAttackPlayer = true, Health = 250f, AttackRange = 2f, AttackDamage = 35f, DamagePerSec = 10f, AttackRate = 3f, Speed = 4f
}
, ["stag1"] = new AnimalConfig {
Type = 5, CanAttackPlayer = true, Health = 80f, AttackRange = 2f, AttackDamage = 35f, DamagePerSec = 10f, AttackRate = 1f, Speed = 15f
}
, ["chicken1"] = new AnimalConfig {
Type = 6, CanAttackPlayer = true, Health = 25f, AttackRange = 1.2f, AttackDamage = 20f, DamagePerSec = 10f, AttackRate = 1f, Speed = 6f
}
}
, FirstReceiver = new ReceiverConfig {
Health = 2000f, HealthPerBattery = 50f, Loot = new LootTable {
TypeLootTable = 0, PrefabLootTable = new PrefabLootTableConfig {
Min = 1, Max = 1, UseCount = true, Prefabs = new List<PrefabConfig> {
new PrefabConfig {
Chance = 100f, PrefabDefinition = "assets/rust.ai/agents/npcplayer/humannpc/scientist/scientistnpc_oilrig.prefab"
}
}
}
, OwnLootTable = new LootTableConfig {
Min = 3, Max = 3, UseCount = true, Items = new List<ItemConfig> {
new ItemConfig {
ShortName = "ammo.rifle", MinAmount = 1500, MaxAmount = 1500, Chance = 100f, IsBluePrint = false, SkinId = 0, Name = ""
}
, new ItemConfig {
ShortName = "syringe.medical", MinAmount = 7, MaxAmount = 8, Chance = 100f, IsBluePrint = false, SkinId = 0, Name = ""
}
, new ItemConfig {
ShortName = "largemedkit", MinAmount = 4, MaxAmount = 5, Chance = 100f, IsBluePrint = false, SkinId = 0, Name = ""
}
}
}
}
, Waves = new HashSet<WaveConfig> {
new WaveConfig {
Level = 1, TimeToStart = 1, Duration = 60, TimerAnimal = 10, Presets = new HashSet<PresetConfig> {
new PresetConfig {
ShortName = "polarbear1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 2
}
}
}
, new PresetConfig {
ShortName = "chicken1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 2
}
}
}
}
}
, new WaveConfig {
Level = 2, TimeToStart = 20, Duration = 120, TimerAnimal = 10, Presets = new HashSet<PresetConfig> {
new PresetConfig {
ShortName = "wolf1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 2
}
}
}
, new PresetConfig {
ShortName = "boar1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 3
}
}
}
}
}
, new WaveConfig {
Level = 3, TimeToStart = 20, Duration = 180, TimerAnimal = 10, Presets = new HashSet<PresetConfig> {
new PresetConfig {
ShortName = "bear1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 3
}
}
}
, new PresetConfig {
ShortName = "stag1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 2
}
}
}
}
}
}
}
, SecondReceiver = new ReceiverConfig {
Health = 3000f, HealthPerBattery = 100f, Loot = new LootTable {
TypeLootTable = 0, PrefabLootTable = new PrefabLootTableConfig {
Min = 1, Max = 1, UseCount = true, Prefabs = new List<PrefabConfig> {
new PrefabConfig {
Chance = 100f, PrefabDefinition = "assets/rust.ai/agents/npcplayer/humannpc/scientist/scientistnpc_oilrig.prefab"
}
}
}
, OwnLootTable = new LootTableConfig {
Min = 3, Max = 3, UseCount = true, Items = new List<ItemConfig> {
new ItemConfig {
ShortName = "ammo.rifle", MinAmount = 3000, MaxAmount = 3000, Chance = 100f, IsBluePrint = false, SkinId = 0, Name = ""
}
, new ItemConfig {
ShortName = "syringe.medical", MinAmount = 15, MaxAmount = 15, Chance = 100f, IsBluePrint = false, SkinId = 0, Name = ""
}
, new ItemConfig {
ShortName = "largemedkit", MinAmount = 9, MaxAmount = 9, Chance = 100f, IsBluePrint = false, SkinId = 0, Name = ""
}
}
}
}
, Waves = new HashSet<WaveConfig> {
new WaveConfig {
Level = 1, TimeToStart = 1, Duration = 30, TimerAnimal = 10, Presets = new HashSet<PresetConfig> {
new PresetConfig {
ShortName = "bear1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 3
}
}
}
, new PresetConfig {
ShortName = "wolf1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 3
}
}
}
, new PresetConfig {
ShortName = "chicken1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 2
}
}
}
,
}
}
, new WaveConfig {
Level = 2, TimeToStart = 20, Duration = 30, TimerAnimal = 10, Presets = new HashSet<PresetConfig> {
new PresetConfig {
ShortName = "wolf1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 3
}
}
}
, new PresetConfig {
ShortName = "boar1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 3
}
}
}
, new PresetConfig {
ShortName = "stag1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 2
}
}
}
,
}
}
, new WaveConfig {
Level = 3, TimeToStart = 20, Duration = 60, TimerAnimal = 10, Presets = new HashSet<PresetConfig> {
new PresetConfig {
ShortName = "chicken1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 10
}
}
}
}
}
, new WaveConfig {
Level = 4, TimeToStart = 30, Duration = 60, TimerAnimal = 10, Presets = new HashSet<PresetConfig> {
new PresetConfig {
ShortName = "polarbear1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 2
}
}
}
, new PresetConfig {
ShortName = "bear1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 2
}
}
}
, new PresetConfig {
ShortName = "wolf1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 2
}
}
}
,
}
}
, new WaveConfig {
Level = 5, TimeToStart = 20, Duration = 90, TimerAnimal = 10, Presets = new HashSet<PresetConfig> {
new PresetConfig {
ShortName = "wolf1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 2
}
}
}
, new PresetConfig {
ShortName = "stag1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 3
}
}
}
, new PresetConfig {
ShortName = "chicken1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 3
}
}
}
,
}
}
, new WaveConfig {
Level = 6, TimeToStart = 20, Duration = 90, TimerAnimal = 10, Presets = new HashSet<PresetConfig> {
new PresetConfig {
ShortName = "polarbear1", ListAmountConfig = new HashSet<AmountConfig> {
new AmountConfig {
Chance = 100f, Count = 9
}
}
}
}
}
}
}
, ThirdReceiver = new ReceiverConfig {
Health = 4000f, HealthPerBattery = 100f, Loot = new LootTable {
TypeLootTable = 0, PrefabLootTable = new PrefabLootTableConfig {
Min = 1, Max = 1, UseCount = true, Prefabs = new List<PrefabConfig> {
new PrefabConfig {
Chance = 100f, PrefabDefinition = "assets/rust.ai/agents/npcplayer/humannpc/scientist/scientistnpc_oilrig.prefab"
}
}
}
, OwnLootTable = new LootTableConfig {
Min = 3, Max = 3, UseCount = true, Items = new List<ItemConfig> {
new ItemConfig {
ShortName = "ammo.rifle", MinAmount = 4500, MaxAmount = 4500, Chance = 100f, IsBluePrint = false, SkinId = 0, Name = ""
}
, new ItemConfig {
// ... [Code preview truncated due to length. Full source in attached file] ...