C#:
using Facepunch;
using Network;
using Oxide.Core;
using Oxide.Core.Libraries;
using Oxide.Core.Plugins;
using ProtoBuf;
using Rust;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.SceneManagement;
using Physics = UnityEngine.Physics;
using Pool = Facepunch.Pool;
using Time = UnityEngine.Time;
namespace Oxide.Plugins {
[Info("PirateNPC", "bmgjet", "0.0.6")]
[Description("Creates NPC To Patrol Ocean,Skies and Land")]
class PirateNPC : RustPlugin {
#region Variables
[PluginReference]
private Plugin Kits;
private int piratePlane = 0;
private int pirateRHIB = 0;
private int pirateRowBoat = 0;
private int pirateSub = 0;
private int piratesMini = 0;
private int pirateScrap = 0;
private int pirateRail = 0;
private int pirateHorse = 0;
private int pirateSnowMobile = 0;
private int pirateBase = 0;
private List<uint> PirateUintList = new List<uint>();
private List<uint> BaseParts = new List<uint>();
private List<uint> GroundedNPCs = new List<uint>();
private Dictionary<ScientistNPC, BaseEntity> ActiveNPCs = new Dictionary<ScientistNPC, BaseEntity>();
private List<uint> NPCsUintList = new List<uint>();
private List<BaseEntity> TrainsBaseEntityList = new List<BaseEntity>();
private List<uint> VoiceUintList = new List<uint>();
private List<uint> CoolDownUintList = new List<uint>();
private List<Vector3> PointsOfIntrest = new List<Vector3>();
private List<BasePlayer> downed = new List<BasePlayer>();
private List<MapMarkerGenericRadius> mapmarkersList = new List<MapMarkerGenericRadius>();
private Timer spawner = null;
private List<Coroutine> Threads = new List<Coroutine>();
private List<Vector3> seanodes = new List<Vector3>();
private List<Vector3> airnodes = new List<Vector3>();
private List<Vector3> groundnodes = new List<Vector3>();
private List<Vector3> roadnodes = new List<Vector3>();
private List<Vector3> railnodes = new List<Vector3>();
private Dictionary<Vector3, bool> dropnodes = new Dictionary<Vector3, bool>();
private List<PrefabData> footnodes = new List<PrefabData>();
private List<PrefabData> Alarmtriggers = new List<PrefabData>();
private List<uint> alarmcooldown = new List<uint>();
private bool sealoaded = false;
private bool airloaded = false;
private bool landloaded = false;
private bool railloaded = false;
private bool footloaded = false;
private readonly List<BasePlayer> _openProfiles = new List<BasePlayer>();
public static PirateNPC plugin;
public static ServerSettings _ServerSettings;
private List<List<Dictionary<string, string>>> loottableDict = new List<List<Dictionary<string, string>>>();
private const string wallprefab = "assets/prefabs/building core/wall/wall.prefab";
private const string foundationprefab = "assets/prefabs/building core/foundation/foundation.prefab";
private const string floorprefab = "assets/prefabs/building core/floor/floor.prefab";
private const string windowprefab = "assets/prefabs/building/wall.window.reinforcedglass/wall.window.glass.reinforced.prefab";
private const string wallframeprefab = "assets/prefabs/building core/wall.frame/wall.frame.prefab";
private const string garagedoorprefab = "assets/prefabs/building/wall.frame.garagedoor/wall.frame.garagedoor.prefab";
private const string workcartprefab = "assets/content/vehicles/trains/workcart/workcart_aboveground.entity.prefab";
private const string wagonentsprefab = "assets/content/vehicles/trains/wagons/trainwagon$.entity.prefab";
private const string codelockprefab = "assets/prefabs/locks/keypad/lock.code.prefab";
private const string autoturretprefab = "assets/prefabs/npc/autoturret/autoturret_deployed.prefab";
private const string samsiteprefab = "assets/prefabs/npc/sam_site_turret/sam_site_turret_deployed.prefab";
private const string rhibentityprefab = "assets/content/vehicles/boats/rhib/rhib.prefab";
private const string rowboatentityprefab = "assets/content/vehicles/boats/rowboat/rowboat.prefab";
private const string minientityprefab = "assets/content/vehicles/minicopter/minicopter.entity.prefab";
private const string scrapentityprefab = "assets/content/vehicles/scrap heli carrier/scraptransporthelicopter.prefab";
private const string horseentityprefab = "assets/rust.ai/nextai/testridablehorse.prefab";
private const string snowmobileentityprefab = "assets/content/vehicles/snowmobiles/snowmobile.prefab";
private const string subentityprefab = "assets/content/vehicles/submarine/submarineduo.entity.prefab";
private const string hoboentityprefab = "assets/prefabs/misc/twitch/hobobarrel/hobobarrel.deployed.prefab";
private const string sphereentityprefab = "assets/prefabs/visualization/sphere.prefab";
private const string buoyantentityprefab = "assets/prefabs/misc/item drop/item_drop_buoyant.prefab";
private const string eliteentityprefab = "assets/bundled/prefabs/radtown/crate_elite.prefab";
private const string basicentityprefab = "assets/bundled/prefabs/radtown/crate_basic.prefab";
private const string normalentityprefab = "assets/bundled/prefabs/radtown/crate_normal.prefab";
private const string helicrateentityprefab = "assets/prefabs/npc/patrol helicopter/heli_crate.prefab";
private const string cargoplaneentityprefab = "assets/prefabs/npc/cargo plane/cargo_plane.prefab";
private const string lanternentityprefab = "assets/prefabs/deployable/lantern/lantern.deployed.prefab";
private const string woodboxentityprefab = "assets/prefabs/deployable/large wood storage/box.wooden.large.prefab";
private const string rhibstorageentityprefab = "assets/content/vehicles/boats/rhib/subents/rhib_storage.prefab";
private const string playerentityprefab = "assets/prefabs/player/player.prefab";
private const string mapmarkerentityprefab = "assets/prefabs/tools/map/genericradiusmarker.prefab";
private const string parachuteentityprefab = "assets/prefabs/misc/parachute/parachute.prefab";
private const string groundfallentityprefab = "assets/bundled/prefabs/fx/player/groundfall.prefab";
private const string c4_explosionentityprefab = "assets/prefabs/tools/c4/effects/c4_explosion.prefab";
private const string damage_effect_debrisprefab = "assets/prefabs/npc/patrol helicopter/damage_effect_debris.prefab";
private const string searchlightentityprefab = "assets/prefabs/deployable/search light/searchlight.deployed.prefab";
private const string oilfireballsmallprefab = "assets/bundled/prefabs/oilfireballsmall.prefab";
private int TopologyBaseBlock = TerrainTopology.MONUMENT;
#endregion
#region Configuration
public class ServerSettings {
public int SpawnEvery;
public int LeaveAfter;
public bool ShowMapMarkers;
public float MapMarkerSize;
public float MapMarkerAlpha;
public float StartFireHealth;
public Color AirMapMarkerColour;
public Color WaterMapMarkerColour;
public Color LandMapMarkerColour;
public Color BaseMapMarkerColour;
public Color RailMapMarkerColour;
public float StopDelayFloat;
public float CrashDelayFloat;
public bool DisableScrapHeliGibs;
public bool DisableHeliFireball;
public bool DisableHelilights;
public bool DisableBoatlights;
public bool DisableLandlights;
public float FireDelay;
public float ExplodeDelay;
public int RHIBNPCAmount;
public int RHIBHealth;
public int RHIBNPCHealth;
public int RHIBBoatAmount;
public int RHIBBoatMaxA;
public float RHIBBoatMaxSpeed;
public float RHIBBoatTurnSpeed;
public float RHIBAIDistance;
public string RHIBKit;
public string RHIBLootString;
public int RowBoatNPCAmount;
public int RowBoatHealth;
public int RowBoatNPCHealth;
public int RowBoatBoatAmount;
public int RowBoatBoatMaxA;
public float RowBoatBoatMaxSpeed;
public float RowBoatBoatTurnSpeed;
public float RowBoatAIDistance;
public string RowBoatKit;
public string RowBoatLootString;
public int SubmarineHealth;
public int SubmarineAmount;
public int SubmarineMaxA;
public float SubmarineMaxSpeed;
public float SubmarineTurnSpeed;
public float SubmarineTargetDepth;
public float SubmarineDamage;
public string SubmarineLootString;
public int MiniHealth;
public int MiniNPCHealth;
public int MiniNPCAmount;
public int MiniAmount;
public int MiniMaxA;
public float MiniMaxSpeed;
public float MiniOrbitDistance;
public float MiniTurnSpeed;
public float MiniHoverHeight;
public float MiniAIDistance;
public float MiniThreatLevel;
public string MiniKit;
public string MiniLootString;
public int ScrapHealth;
public int ScrapNPCHealth;
public int ScrapNPCAmount;
public int ScrapAmount;
public int ScrapMaxA;
public float ScrapMaxSpeed;
public float ScrapOrbitDistance;
public float ScrapTurnSpeed;
public float ScrapHoverHeight;
public float ScrapAIDistance;
public float ScrapThreatLevel;
public string ScrapKit;
public string ScrapLootString;
public bool CargoPathBool;
public bool MonumentPathBool;
public bool SamSitesBool0;
public bool SamSitesBoat;
public bool StaticSamSitesBool;
public float SamSitesDamageFloat;
public bool NPCParachuteBool;
public float NPCTick;
public float NPCParachuteTrigger;
public float NPCParachuteDecay;
public float NPCParachuteDie;
public float HeliTargetDistance;
public float BoatTargetDistance;
public float LandTargetDistance;
public int SnowMobileAmount;
public int SnowMobileMax;
public float SnowMobileNPCHealth;
public float SnowMobileAimMulti;
public float SnowMobileHealth;
public float SnowMobileRomeRange;
public bool SnowMobileCanRoam;
public float SnowMobileMoveSpeed;
public string SnowMobileKit;
public string SnowMobileLootString;
public int HorseAmount;
public int HorseMax;
public float HorseNPCHealth;
public float HorseAimMulti;
public float HorseHealth;
public float HorseRomeRange;
public bool HorseCanRoam;
public float HorseMoveSpeed;
public string HorseKit;
public string HorseLootString;
public string LootProfiles;
public bool NPCChatter;
public int NPCMaxVoicesAtOnce;
public string NPCCustomChatter0;
public int NPCCustomChatterCD;
public string NPCCustomDeath0;
public int NPCCustomDeathCD;
public string NPCCustomKill0;
public int NPCCustomKillCD;
public string NPCCustomWarningString;
public float NPCCustomWarningDistance;
public int NPCCustomWarningCD;
public bool NPCCAttackSupplyDrops;
public bool NPCAttackCreate;
public bool NPCCountRaids;
public bool NPCsCanTargetNPCsBool;
public float NPCDamageScaler;
public float NPCAimScaler;
public string NPCNameTag;
public float PiratesAirPOIRadius;
public float PiratesWaterPOIRadius;
public float PiratesLandPOIRadius;
public bool NPCPeaceKeeperBool;
public int POIExpires;
public float NPCPeaceKeeperToggle;
public bool RaidableBasesAT;
public int HorseLootMulti;
public int SnowMobileLootMulti;
public int ScrapLootMulti;
public int MiniLootMulti;
public int SubmarineLootMulti;
public int RowBoatLootMulti;
public int RHIBLootMulti;
public int PirateBaseAmount;
public int PirateBaseWallRadius;
public int PirateBaseNPCAmount;
public float PirateBaseAimMulti;
public float PirateBaseNPCHealth;
public string PirateBaseNPCKit;
public string PirateBaseLootString;
public int PirateBaseLootMulti;
public float PirateBaseDoorHealth;
public int PirateRailAmount;
public float PirateRailTrainSpeed;
public int PirateRailHealth;
public int PirateRailNPCAmount;
public float PirateRailAimMulti;
public float PirateRailNPCHealth;
public float PirateRailNPCDriverHealth;
public string PirateRailNPCKit;
public string PirateRailLootString;
public int PirateRailLootMulti;
public int PirateRailWagonAmount;
public float PirateRailWagonSamRange;
public float PirateRailWagonSamHealth;
public float PirateRailWagonTurretHealth;
public string PirateRailWagonTurretGun;
public float PirateRailWagonhealth;
public float PirateRailWagondoorhealth;
public ulong PirateRailwagondoorskinid;
public float PirateFootNPCHealth;
public float PirateFootNPCAimMulti;
public string PirateFootNPCKit;
public float PirateFootNPCRoam;
public bool PirateCargoPlane;
public float PiratePlaneflyheight;
public float PiratePlaneflyspeed;
public int PiratePlaneNPCAmount;
public int PiratePlaneNPCDrops;
public bool PirateEventEnabled;
public bool PirateEventAnnounce;
public float PirateEventRadius;
public int PirateEventNPCAmount;
public string PirateEventNPCKit;
public float PirateEventNPCHealth;
public float PirateEventNPCAimMulti;
public float PirateEventCoolDownDelay;
public float PirateEventSpawnRadius;
public float PirateEventStationaryRadius;
public List<string> PiratePlaneAllowedDrops;
public void LoadSettings() {
RaidableBasesAT = bool.Parse(plugin.Config["(RaidableBases) Disable Auto Turrets Attacking Pirates"].ToString());
SpawnEvery = int.Parse(plugin.Config["Spawn Pirates Every (sec)"].ToString());
LeaveAfter = int.Parse(plugin.Config["Leave After (sec)"].ToString());
ShowMapMarkers = bool.Parse(plugin.Config["Map Marker Show"].ToString());
MapMarkerSize = float.Parse(plugin.Config["Map Marker Size"].ToString());
MapMarkerAlpha = float.Parse(plugin.Config["Map Marker Alpha"].ToString());
StartFireHealth = float.Parse(plugin.Config["Start Fire When Health Below"].ToString());
AirMapMarkerColour = plugin.Hex2Colour(plugin.Config["Map Marker Colour (Air) (Hex)"].ToString());
WaterMapMarkerColour = plugin.Hex2Colour(plugin.Config["Map Marker Colour (Water) (Hex)"].ToString());
LandMapMarkerColour = plugin.Hex2Colour(plugin.Config["Map Marker Colour (Land) (Hex)"].ToString());
BaseMapMarkerColour = plugin.Hex2Colour(plugin.Config["Map Marker Colour (Base) (Hex)"].ToString());
RailMapMarkerColour = plugin.Hex2Colour(plugin.Config["Map Marker Colour (Rail) (Hex)"].ToString());
StopDelayFloat = float.Parse(plugin.Config["Stop Delay (sec)"].ToString());
CrashDelayFloat = float.Parse(plugin.Config["Crash Delay (sec)"].ToString());
DisableScrapHeliGibs = bool.Parse(plugin.Config["Disable ScrapHeli Gibs"].ToString());
DisableHeliFireball = bool.Parse(plugin.Config["Disable Heli Fireball"].ToString());
DisableHelilights = bool.Parse(plugin.Config["Disable Heli Lights"].ToString());
DisableBoatlights = bool.Parse(plugin.Config["Disable Boat Lights"].ToString());
DisableLandlights = bool.Parse(plugin.Config["Disable Land Lights"].ToString());
FireDelay = float.Parse(plugin.Config["Fire After Crash/Sink (sec)"].ToString());
ExplodeDelay = float.Parse(plugin.Config["Explode After Fire (sec)"].ToString());
RHIBNPCAmount = int.Parse(plugin.Config["RHIB NPC Amount Per Boat"].ToString());
RHIBHealth = int.Parse(plugin.Config["RHIB Health"].ToString());
RHIBNPCHealth = int.Parse(plugin.Config["RHIB NPC Health"].ToString());
RHIBBoatAmount = int.Parse(plugin.Config["RHIB Boat Amount Per Spawn"].ToString());
RHIBBoatMaxA = int.Parse(plugin.Config["RHIB Boat Max At Once"].ToString());
RHIBBoatMaxSpeed = float.Parse(plugin.Config["RHIB Boat Max Speed"].ToString());
RHIBBoatTurnSpeed = float.Parse(plugin.Config["RHIB Boat Turn Speed"].ToString());
RHIBAIDistance = float.Parse(plugin.Config["RHIB AI Target Distance"].ToString());
RHIBKit = plugin.Config["RHIB Kit Bots"].ToString();
RHIBLootString = plugin.Config["RHIB Loot Spawner (Leave Blank For Profile Loot)"].ToString();
RHIBLootMulti = int.Parse(plugin.Config["RHIB Loot Spawner Multiplier"].ToString());
RowBoatNPCAmount = int.Parse(plugin.Config["RowBoat NPC Amount Per Boat"].ToString());
RowBoatHealth = int.Parse(plugin.Config["RowBoat Health"].ToString());
RowBoatNPCHealth = int.Parse(plugin.Config["RowBoat NPC Health"].ToString());
RowBoatBoatAmount = int.Parse(plugin.Config["RowBoat Boat Amount Per Spawn"].ToString());
RowBoatBoatMaxA = int.Parse(plugin.Config["RowBoat Boat Max At Once"].ToString());
RowBoatBoatMaxSpeed = float.Parse(plugin.Config["RowBoat Boat Max Speed"].ToString());
RowBoatBoatTurnSpeed = float.Parse(plugin.Config["RowBoat Boat Turn Speed"].ToString());
RowBoatAIDistance = float.Parse(plugin.Config["RowBoat AI Target Distance"].ToString());
RowBoatKit = plugin.Config["RowBoat Kit Bots"].ToString();
RowBoatLootString = plugin.Config["RowBoat Loot Spawner (Leave Blank For Profile Loot)"].ToString();
RowBoatLootMulti = int.Parse(plugin.Config["RowBoat Loot Spawner Multiplier"].ToString());
SubmarineHealth = int.Parse(plugin.Config["Submarine Health"].ToString());
SubmarineAmount = int.Parse(plugin.Config["Submarine Amount Per Spawn"].ToString());
SubmarineMaxA = int.Parse(plugin.Config["Submarine Max At Once"].ToString());
SubmarineMaxSpeed = float.Parse(plugin.Config["Submarine Max Speed"].ToString());
SubmarineTurnSpeed = float.Parse(plugin.Config["Submarine Turn Speed"].ToString());
SubmarineTargetDepth = float.Parse(plugin.Config["Submarine Target Depth"].ToString());
SubmarineDamage = float.Parse(plugin.Config["Submarine Take Damage"].ToString());
SubmarineLootString = plugin.Config["Submarine Loot Spawner (Leave Blank For Profile Loot)"].ToString();
SubmarineLootMulti = int.Parse(plugin.Config["Submarine Loot Spawner Multiplier"].ToString());
MiniHealth = int.Parse(plugin.Config["Minicopter Health"].ToString());
MiniNPCHealth = int.Parse(plugin.Config["Minicopter NPC Health"].ToString());
MiniNPCAmount = int.Parse(plugin.Config["Minicopter NPC Amount"].ToString());
MiniAmount = int.Parse(plugin.Config["Minicopter Amount Per Spawn"].ToString());
MiniMaxA = int.Parse(plugin.Config["Minicopter Max At Once"].ToString());
MiniMaxSpeed = float.Parse(plugin.Config["Minicopter Max Speed"].ToString());
MiniOrbitDistance = float.Parse(plugin.Config["Minicopter Orbit Distance"].ToString());
MiniTurnSpeed = float.Parse(plugin.Config["Minicopter Turn Speed"].ToString());
MiniHoverHeight = float.Parse(plugin.Config["Minicopter Hover Height"].ToString());
MiniAIDistance = float.Parse(plugin.Config["Minicopter AI Target Distance"].ToString());
MiniThreatLevel = float.Parse(plugin.Config["Minicopter Target Threat Level"].ToString());
MiniKit = plugin.Config["Minicopter Kit Bots"].ToString();
MiniLootString = plugin.Config["Minicopter Loot Spawner (Leave Blank For Profile Loot)"].ToString();
MiniLootMulti = int.Parse(plugin.Config["Minicopter Loot Spawner Multiplier"].ToString());
ScrapHealth = int.Parse(plugin.Config["Scrapcopter Health"].ToString());
ScrapNPCHealth = int.Parse(plugin.Config["Scrapcopter NPC Health"].ToString());
ScrapNPCAmount = int.Parse(plugin.Config["Scrapcopter NPC Amount"].ToString());
ScrapAmount = int.Parse(plugin.Config["Scrapcopter Amount Per Spawn"].ToString());
ScrapMaxA = int.Parse(plugin.Config["Scrapcopter Max At Once"].ToString());
ScrapMaxSpeed = float.Parse(plugin.Config["Scrapcopter Max Speed"].ToString());
ScrapOrbitDistance = float.Parse(plugin.Config["Scrapcopter Orbit Distance"].ToString());
ScrapTurnSpeed = float.Parse(plugin.Config["Scrapcopter Turn Speed"].ToString());
ScrapHoverHeight = float.Parse(plugin.Config["Scrapcopter Hover Height"].ToString());
ScrapAIDistance = float.Parse(plugin.Config["Scrapcopter AI Target Distance"].ToString());
ScrapThreatLevel = float.Parse(plugin.Config["Scrapcopter Target Threat Level"].ToString());
ScrapKit = plugin.Config["Scrapcopter Kit Bots"].ToString();
ScrapLootString = plugin.Config["Scrapcopter Loot Spawner (Leave Blank For Profile Loot)"].ToString();
ScrapLootMulti = int.Parse(plugin.Config["Scrapcopter Loot Spawner Multiplier"].ToString());
CargoPathBool = bool.Parse(plugin.Config["Use Cargoship Path For Ocean"].ToString());
MonumentPathBool = bool.Parse(plugin.Config["Use Monument Path For Air"].ToString());
SamSitesBool0 = bool.Parse(plugin.Config["Samsites Attack Pirates"].ToString());
SamSitesBoat = bool.Parse(plugin.Config["Samsites Attack Pirate Boats"].ToString());
StaticSamSitesBool = bool.Parse(plugin.Config["Static(Server) Samsites Attack Pirates"].ToString());
SamSitesDamageFloat = float.Parse(plugin.Config["Samsites Damage Multiplyer (Pirates)"].ToString());
NPCParachuteBool = bool.Parse(plugin.Config["NPCs Parachute"].ToString());
NPCTick = float.Parse(plugin.Config["NPCs Tick Rate (sec)"].ToString());
NPCParachuteTrigger = float.Parse(plugin.Config["NPCs Parachute When Heli Health Below"].ToString());
NPCParachuteDecay = float.Parse(plugin.Config["NPCs Parachute Decay (sec)"].ToString());
NPCParachuteDie = float.Parse(plugin.Config["NPCs Parachute Suicide (sec)"].ToString());
HeliTargetDistance = float.Parse(plugin.Config["(Air) Pirates Target Distance"].ToString());
BoatTargetDistance = float.Parse(plugin.Config["(Sea) Pirates Target Distance"].ToString());
LandTargetDistance = float.Parse(plugin.Config["(Land) Pirates Target Distance"].ToString());
SnowMobileAmount = int.Parse(plugin.Config["SnowMobile Amount Per Spawn"].ToString());
SnowMobileMax = int.Parse(plugin.Config["SnowMobile Max At Once"].ToString());
SnowMobileNPCHealth = float.Parse(plugin.Config["SnowMobile NPC Health"].ToString());
SnowMobileAimMulti = float.Parse(plugin.Config["SnowMobile NPC Aim Distance"].ToString());
SnowMobileHealth = float.Parse(plugin.Config["SnowMobile Health"].ToString());
SnowMobileRomeRange = float.Parse(plugin.Config["SnowMobile Roam Range"].ToString());
SnowMobileCanRoam = bool.Parse(plugin.Config["SnowMobile Roam"].ToString());
SnowMobileMoveSpeed = float.Parse(plugin.Config["SnowMobile Speed"].ToString());
SnowMobileKit = plugin.Config["SnowMobile Kit Bots"].ToString();
SnowMobileLootString = plugin.Config["SnowMobile Loot Spawner (Leave Blank For Profile Loot)"].ToString();
SnowMobileLootMulti = int.Parse(plugin.Config["SnowMobile Loot Spawner Multiplier"].ToString());
HorseAmount = int.Parse(plugin.Config["Horse Amount Per Spawn"].ToString());
HorseMax = int.Parse(plugin.Config["Horse Max At Once"].ToString());
HorseNPCHealth = float.Parse(plugin.Config["Horse NPC Health"].ToString());
HorseAimMulti = float.Parse(plugin.Config["Horse NPC Aim Distance"].ToString());
HorseHealth = float.Parse(plugin.Config["Horse Health"].ToString());
HorseRomeRange = float.Parse(plugin.Config["Horse Roam Range"].ToString());
HorseCanRoam = bool.Parse(plugin.Config["Horse Roam"].ToString());
HorseMoveSpeed = float.Parse(plugin.Config["Horse Speed"].ToString());
HorseKit = plugin.Config["Horse Kit Bots"].ToString();
HorseLootString = plugin.Config["Horse Loot Spawner (Leave Blank For Profile Loot)"].ToString();
HorseLootMulti = int.Parse(plugin.Config["Horse Loot Spawner Multiplier"].ToString());
LootProfiles = plugin.Config["XLootCustomProfiles"].ToString();
NPCChatter = bool.Parse(plugin.Config["NPCs Radio Disable"].ToString());
NPCCustomChatter0 = plugin.Config["NPCs Radio Custom"].ToString();
NPCCustomChatterCD = int.Parse(plugin.Config["NPCs Radio Custom Cooldown"].ToString());
NPCCustomDeath0 = plugin.Config["NPCs Custom Death Voice"].ToString();
NPCCustomDeathCD = int.Parse(plugin.Config["NPCs Custom Death VoiceCooldown"].ToString());
NPCCustomKill0 = plugin.Config["NPCs Custom Kill Voice"].ToString();
NPCCustomKillCD = int.Parse(plugin.Config["NPCs Custom Kill Voice Cooldown"].ToString());
NPCNameTag = plugin.Config["NPCs Name Tag"].ToString();
NPCCustomWarningString = plugin.Config["NPCs Custom Warning Voice"].ToString();
NPCCustomWarningDistance = float.Parse(plugin.Config["NPCs Custom Warning Voice Trigger Distance"].ToString());
NPCCustomWarningCD = int.Parse(plugin.Config["NPCs Custom Warning Voice Cooldown"].ToString());
NPCCAttackSupplyDrops = bool.Parse(plugin.Config["NPCs Pirates Attack Supply Drops"].ToString());
NPCAttackCreate = bool.Parse(plugin.Config["NPCs Pirates Attack Creates Being Hacked"].ToString());
NPCsCanTargetNPCsBool = bool.Parse(plugin.Config["NPCs Can Target Other NPCs"].ToString());
NPCCountRaids = bool.Parse(plugin.Config["NPCs Pirates Counter Raids"].ToString());
NPCMaxVoicesAtOnce = int.Parse(plugin.Config["NPCs Max Voices To Play At Once On Server"].ToString());
NPCDamageScaler = float.Parse(plugin.Config["NPC Damage Scaler"].ToString());
NPCAimScaler = float.Parse(plugin.Config["NPC Aim Scaler"].ToString());
PiratesAirPOIRadius = float.Parse(plugin.Config["Pirates Distance From POI Air"].ToString());
PiratesWaterPOIRadius = float.Parse(plugin.Config["Pirates Distance From POI Water"].ToString());
PiratesLandPOIRadius = float.Parse(plugin.Config["Pirates Distance From POI Land"].ToString());
NPCPeaceKeeperBool = bool.Parse(plugin.Config["NPCs Pirates PeaceKeeper Mode"].ToString());
POIExpires = int.Parse(plugin.Config["Pirates POI Expires After (sec)"].ToString());
NPCPeaceKeeperToggle = float.Parse(plugin.Config["NPCs Pirates PeaceKeeper Toggle Hostile Distance"].ToString());
PirateBaseAmount = int.Parse(plugin.Config["Pirate Base Amount To Spawn"].ToString());
PirateBaseNPCAmount = int.Parse(plugin.Config["Pirate Base Amount Of NPCs"].ToString());
PirateBaseWallRadius = int.Parse(plugin.Config["Pirate Base Wall Radius"].ToString());
PirateBaseNPCHealth = float.Parse(plugin.Config["Pirate Base NPC Health"].ToString());
PirateBaseAimMulti = float.Parse(plugin.Config["Pirate Base NPC Aim Distance"].ToString());
PirateBaseNPCKit = plugin.Config["Pirate Base NPC Kit"].ToString();
PirateBaseLootString = plugin.Config["Pirate Base Loot Spawner (Leave Blank For Profile Loot)"].ToString();
PirateBaseDoorHealth = float.Parse(plugin.Config["Pirate Base Door Health"].ToString());
PirateBaseLootMulti = int.Parse(plugin.Config["Pirate Base Loot Spawner Multiplyer"].ToString());
PirateRailAmount = int.Parse(plugin.Config["Pirate Rail Amount To Spawn"].ToString());
PirateRailHealth = int.Parse(plugin.Config["Pirate Rail Train Health"].ToString());
PirateRailNPCAmount = int.Parse(plugin.Config["Pirate Rail Amount Of NPCs"].ToString());
PirateRailNPCHealth = float.Parse(plugin.Config["Pirate Rail NPC Health"].ToString());
PirateRailNPCDriverHealth = float.Parse(plugin.Config["Pirate Rail NPC Driver Health"].ToString());
PirateRailAimMulti = float.Parse(plugin.Config["Pirate Rail NPC Aim Distance"].ToString());
PirateRailNPCKit = plugin.Config["Pirate Rail NPC Kit"].ToString();
PirateRailLootString = plugin.Config["Pirate Rail Loot Spawner (Leave Blank For Profile Loot)"].ToString();
PirateRailLootMulti = int.Parse(plugin.Config["Pirate Rail Loot Spawner Multiplyer"].ToString());
PirateRailWagonSamRange = float.Parse(plugin.Config["Pirate Rail Samsite Range"].ToString());
PirateRailWagonSamHealth = float.Parse(plugin.Config["Pirate Rail Samsite Health"].ToString());
PirateRailWagonTurretHealth = float.Parse(plugin.Config["Pirate Rail Turret Health"].ToString());
PirateRailWagonTurretGun = plugin.Config["Pirate Rail Turret Gun"].ToString();
PirateRailWagonhealth = float.Parse(plugin.Config["Pirate Rail Wagon Health"].ToString());
PirateRailWagondoorhealth = float.Parse(plugin.Config["Pirate Rail Wagon Door Health"].ToString());
PirateRailwagondoorskinid = ulong.Parse(plugin.Config["Pirate Rail Wagon Door SkinID"].ToString());
PirateRailWagonAmount = int.Parse(plugin.Config["Pirate Rail Wagon Spawn Ammount"].ToString());
PirateRailTrainSpeed = float.Parse(plugin.Config["Pirate Rail Train Speed"].ToString());
PirateFootNPCHealth = float.Parse(plugin.Config["Pirate Foot NPC Health"].ToString());
PirateFootNPCAimMulti = float.Parse(plugin.Config["Pirate Foot Aim Distance"].ToString());
PirateFootNPCKit = plugin.Config["Pirate Foot NPC Kit"].ToString();
PirateFootNPCRoam = float.Parse(plugin.Config["Pirate Foot NPC Roam Distance"].ToString());
PirateCargoPlane = bool.Parse(plugin.Config["Pirate Plane Event Enabled"].ToString());
PiratePlaneflyheight = float.Parse(plugin.Config["Pirate Plane Fly Height"].ToString());
PiratePlaneflyspeed = float.Parse(plugin.Config["Pirate Plane Fly Speed"].ToString());
PiratePlaneNPCAmount = int.Parse(plugin.Config["Pirate Plane NPCs Per Drop"].ToString());
PiratePlaneNPCDrops = int.Parse(plugin.Config["Pirate Plane Number Of Drops"].ToString());
PiratePlaneAllowedDrops = plugin.AllowedMonumentList(plugin.Config["Pirate Plane Allowed Monuments"].ToString());
PirateEventEnabled = bool.Parse(plugin.Config["Pirates Events Enabled"].ToString());
PirateEventCoolDownDelay = float.Parse(plugin.Config["Pirate Events CoolDown Delay"].ToString());
PirateEventRadius = float.Parse(plugin.Config["Pirate Events Player Radius"].ToString());
PirateEventNPCAmount = int.Parse(plugin.Config["Pirate Events NPC Amount"].ToString());
PirateEventNPCKit = plugin.Config["Pirate Events NPC Kit"].ToString();
PirateEventNPCHealth = float.Parse(plugin.Config["Pirate Events NPC Health"].ToString());
PirateEventNPCAimMulti = float.Parse(plugin.Config["Pirate Events NPC AimMulti"].ToString());
PirateEventAnnounce = bool.Parse(plugin.Config["Pirate Events Annoucements"].ToString());
PirateEventSpawnRadius = float.Parse(plugin.Config["Pirate Events NPC Spawn Radius"].ToString());
PirateEventStationaryRadius = float.Parse(plugin.Config["Pirate Events NPC Stationary Radius"].ToString());
}
}
protected override void LoadDefaultConfig() {
Puts("Creating a new configuration file");
Config["Spawn Pirates Every (sec)"] = 900;
Config["Leave After (sec)"] = 1300;
Config["(Air) Pirates Target Distance"] = 200f;
Config["(Sea) Pirates Target Distance"] = 30f;
Config["(Land) Pirates Target Distance"] = 40f;
Config["(RaidableBases) Disable Auto Turrets Attacking Pirates"] = true;
Config["Map Marker Show"] = true;
Config["Map Marker Colour (Air) (Hex)"] = "#ada500";
Config["Map Marker Colour (Water) (Hex)"] = "#001dad";
Config["Map Marker Colour (Land) (Hex)"] = "#00ad00";
Config["Map Marker Colour (Base) (Hex)"] = "#ad0000";
Config["Map Marker Colour (Rail) (Hex)"] = "#ad00a0";
Config["Map Marker Alpha"] = 0.2f;
Config["Map Marker Size"] = 0.3f;
Config["Start Fire When Health Below"] = 80f;
Config["Stop Delay (sec)"] = 3;
Config["Crash Delay (sec)"] = 0.5;
Config["Disable ScrapHeli Gibs"] = true;
Config["Disable Heli Fireball"] = true;
Config["Disable Heli Lights"] = false;
Config["Disable Boat Lights"] = false;
Config["Disable Land Lights"] = false;
Config["Fire After Crash/Sink (sec)"] = 60;
Config["Explode After Fire (sec)"] = 10;
Config["RHIB Kit Bots"] = "";
Config["RHIB Loot Spawner (Leave Blank For Profile Loot)"] = eliteentityprefab;
Config["RHIB Loot Spawner Multiplier"] = 2;
Config["RHIB NPC Amount Per Boat"] = 4;
Config["RHIB Health"] = 500;
Config["RHIB NPC Health"] = 120;
Config["RHIB Boat Amount Per Spawn"] = 1;
Config["RHIB Boat Max Speed"] = 14f;
Config["RHIB Boat Turn Speed"] = 7.5f;
Config["RHIB AI Target Distance"] = 5f;
Config["RHIB Boat Max At Once"] = 1;
Config["RowBoat Kit Bots"] = "";
Config["RowBoat Loot Spawner (Leave Blank For Profile Loot)"] = basicentityprefab;
Config["RowBoat Loot Spawner Multiplier"] = 1;
Config["RowBoat NPC Amount Per Boat"] = 2;
Config["RowBoat Health"] = 400;
Config["RowBoat NPC Health"] = 100;
Config["RowBoat Boat Amount Per Spawn"] = 2;
Config["RowBoat Boat Max Speed"] = 11f;
Config["RowBoat Boat Turn Speed"] = 7.5f;
Config["RowBoat AI Target Distance"] = 10f;
Config["RowBoat Boat Max At Once"] = 4;
Config["Submarine Loot Spawner (Leave Blank For Profile Loot)"] = eliteentityprefab;
Config["Submarine Loot Spawner Multiplier"] = 1;
Config["Submarine Health"] = 700;
Config["Submarine Amount Per Spawn"] = 1;
Config["Submarine Max Speed"] = 6f;
Config["Submarine Turn Speed"] = 18f;
Config["Submarine Target Depth"] = 6f;
Config["Submarine Max At Once"] = 2;
Config["Submarine Take Damage"] = 2500;
Config["Minicopter Kit Bots"] = "";
Config["Minicopter Loot Spawner (Leave Blank For Profile Loot)"] = normalentityprefab;
Config["Minicopter Loot Spawner Multiplier"] = 1;
Config["Minicopter Health"] = 300;
Config["Minicopter NPC Health"] = 600;
Config["Minicopter NPC Amount"] = 3;
Config["Minicopter Amount Per Spawn"] = 2;
Config["Minicopter Max Speed"] = 25f;
Config["Minicopter Turn Speed"] = 4.5f;
Config["Minicopter Hover Height"] = 45f;
Config["Minicopter AI Target Distance"] = 4.5f;
Config["Minicopter Max At Once"] = 4;
Config["Minicopter Orbit Distance"] = 60f;
Config["Minicopter Target Threat Level"] = 0.9f;
Config["Scrapcopter Kit Bots"] = "";
Config["Scrapcopter Loot Spawner (Leave Blank For Profile Loot)"] = helicrateentityprefab;
Config["Scrapcopter Loot Spawner Multiplier"] = 3;
Config["Scrapcopter Health"] = 850;
Config["Scrapcopter NPC Health"] = 100;
Config["Scrapcopter NPC Amount"] = 11;
Config["Scrapcopter Amount Per Spawn"] = 1;
Config["Scrapcopter Max Speed"] = 20f;
Config["Scrapcopter Turn Speed"] = 2.5f;
Config["Scrapcopter Hover Height"] = 45f;
Config["Scrapcopter AI Target Distance"] = 4.5f;
Config["Scrapcopter Max At Once"] = 2;
Config["Scrapcopter Orbit Distance"] = 65f;
Config["Scrapcopter Target Threat Level"] = 1f;
Config["SnowMobile Amount Per Spawn"] = 3;
Config["SnowMobile Max At Once"] = 6;
Config["SnowMobile NPC Health"] = 15f;
Config["SnowMobile NPC Aim Distance"] = 0.5f;
Config["SnowMobile Health"] = 200f;
Config["SnowMobile Roam Range"] = 200f;
Config["SnowMobile Roam"] = true;
Config["SnowMobile Speed"] = 10f;
Config["SnowMobile Kit Bots"] = "";
Config["SnowMobile Loot Spawner (Leave Blank For Profile Loot)"] = normalentityprefab;
Config["SnowMobile Loot Spawner Multiplier"] = 1;
Config["Horse Amount Per Spawn"] = 3;
Config["Horse Max At Once"] = 6;
Config["Horse NPC Health"] = 15f;
Config["Horse Health"] = 350f;
Config["Horse NPC Aim Distance"] = 0.5f;
Config["Horse Roam Range"] = 280f;
Config["Horse Roam"] = true;
Config["Horse Speed"] = 8f;
Config["Horse Kit Bots"] = "";
Config["Horse Loot Spawner (Leave Blank For Profile Loot)"] = normalentityprefab;
Config["Horse Loot Spawner Multiplier"] = 1;
Config["Use Cargoship Path For Ocean"] = true;
Config["Use Monument Path For Air"] = false;
Config["Samsites Attack Pirates"] = false;
Config["Static(Server) Samsites Attack Pirates"] = false;
Config["Samsites Attack Pirate Boats"] = false;
Config["Samsites Damage Multiplyer (Pirates)"] = 2f;
Config["NPCs Tick Rate (sec)"] = 1.5f;
Config["NPCs Parachute"] = true;
Config["NPCs Parachute When Heli Health Below"] = 30f;
Config["NPCs Parachute Decay (sec)"] = 30f;
Config["NPCs Parachute Suicide (sec)"] = 600f;
Config["NPCs Radio Disable"] = false;
Config["NPCs Radio Custom"] = "";
Config["NPCs Custom Kill Voice"] = "";
Config["NPCs Custom Death Voice"] = "";
Config["NPCs Custom Warning Voice"] = "";
Config["NPCs Radio Custom Cooldown"] = 10;
Config["NPCs Custom Death VoiceCooldown"] = 8;
Config["NPCs Custom Kill Voice Cooldown"] = 8;
Config["NPCs Custom Warning Voice Cooldown"] = 15;
Config["NPCs Custom Warning Voice Trigger Distance"] = 15;
Config["NPCs Max Voices To Play At Once On Server"] = 20;
Config["NPCs Pirates Attack Supply Drops"] = true;
Config["NPCs Pirates Attack Creates Being Hacked"] = true;
Config["NPCs Pirates Counter Raids"] = true;
Config["NPCs Pirates PeaceKeeper Mode"] = true;
Config["NPCs Pirates PeaceKeeper Toggle Hostile Distance"] = 4;
Config["NPC Damage Scaler"] = 0.8f;
Config["NPC Aim Scaler"] = 1;
Config["NPCs Name Tag"] = "[Pirate]";
Config["NPCs Can Target Other NPCs"] = false;
Config["Pirates Distance From POI Air"] = 5000f;
Config["Pirates Distance From POI Water"] = 400f;
Config["Pirates Distance From POI Land"] = 800f;
Config["Pirates POI Expires After (sec)"] = 60f;
Config["Pirate Base Amount To Spawn"] = 3;
Config["Pirate Base Amount Of NPCs"] = 6;
Config["Pirate Base NPC Aim Distance"] = 0.6f;
Config["Pirate Base NPC Health"] = 150f;
Config["Pirate Base NPC Kit"] = "";
Config["Pirate Base Wall Radius"] = 12;
Config["Pirate Base Loot Spawner (Leave Blank For Profile Loot)"] = eliteentityprefab;
Config["Pirate Base Loot Spawner Multiplyer"] = 3;
Config["Pirate Base Door Health"] = 600f;
Config["Pirate Rail Amount To Spawn"] = 1;
Config["Pirate Rail Train Health"] = 1000;
Config["Pirate Rail Amount Of NPCs"] = 6;
Config["Pirate Rail NPC Aim Distance"] = 0.6f;
Config["Pirate Rail NPC Health"] = 150f;
Config["Pirate Rail NPC Driver Health"] = 2f;
Config["Pirate Rail NPC Kit"] = "";
Config["Pirate Rail Loot Spawner (Leave Blank For Profile Loot)"] = eliteentityprefab;
Config["Pirate Rail Loot Spawner Multiplyer"] = 4;
Config["Pirate Rail Samsite Range"] = 20f;
Config["Pirate Rail Samsite Health"] = 200f;
Config["Pirate Rail Turret Health"] = 50f;
Config["Pirate Rail Turret Gun"] = "pistol.eoka";
Config["Pirate Rail Wagon Health"] = 2500f;
Config["Pirate Rail Wagon Door Health"] = 55f;
Config["Pirate Rail Wagon Door SkinID"] = 2488843636;
Config["Pirate Rail Wagon Spawn Ammount"] = 3;
Config["Pirate Rail Train Speed"] = 8;
Config["Pirate Foot NPC Health"] = 120;
Config["Pirate Foot Aim Distance"] = 0.9f;
Config["Pirate Foot NPC Kit"] = "";
Config["Pirate Foot NPC Roam Distance"] = 50f;
Config["Pirates Events Enabled"] = true;
Config["Pirate Events CoolDown Delay"] = 600f;
Config["Pirate Events Annoucements"] = true;
Config["Pirate Events Player Radius"] = 50;
Config["Pirate Events NPC Amount"] = 5;
Config["Pirate Events NPC Kit"] = "";
Config["Pirate Events NPC Health"] = 120f;
Config["Pirate Events NPC AimMulti"] = 0.8f;
Config["Pirate Plane Event Enabled"] = true;
Config["Pirate Plane Fly Height"] = 120f;
Config["Pirate Plane Fly Speed"] = 40f;
Config["Pirate Plane NPCs Per Drop"] = 3f;
Config["Pirate Plane Number Of Drops"] = 6f;
Config["Pirate Events NPC Spawn Radius"] = 12f;
Config["Pirate Events NPC Stationary Radius"] = 4f;
Config["Pirate Plane Allowed Monuments"] = "assets/bundled/prefabs/autospawn/monument/harbor/harbor_2.prefab|assets/bundled/prefabs/autospawn/monument/harbor/harbor_1.prefab|assets/bundled/prefabs/autospawn/monument/military_bases/desert_military_base_d.prefab|assets/bundled/prefabs/autospawn/monument/arctic_bases/arctic_research_base_a.prefab|assets/bundled/prefabs/autospawn/monument/xlarge/launch_site_1.prefab|assets/bundled/prefabs/autospawn/monument/large/excavator_1.prefab|assets/bundled/prefabs/autospawn/monument/medium/junkyard_1.prefab|assets/bundled/prefabs/autospawn/monument/large/trainyard_1.prefab|assets/bundled/prefabs/autospawn/monument/large/powerplant_1.prefab|assets/bundled/prefabs/autospawn/monument/large/military_tunnel_1.prefab|assets/bundled/prefabs/autospawn/monument/large/airfield_1.prefab|assets/bundled/prefabs/autospawn/monument/large/water_treatment_plant_1.prefab|assets/bundled/prefabs/autospawn/monument/medium/radtown_small_3.prefab|assets/bundled/prefabs/autospawn/monument/small/mining_quarry_a.prefab|assets/bundled/prefabs/autospawn/monument/small/satellite_dish.prefab|assets/bundled/prefabs/autospawn/monument/small/sphere_tank.prefab|assets/bundled/prefabs/autospawn/monument/small/mining_quarry_b.prefab|assets/bundled/prefabs/autospawn/monument/small/mining_quarry_c.prefab|assets/bundled/prefabs/autospawn/monument/tiny/water_well_d.prefab|assets/bundled/prefabs/autospawn/monument/tiny/water_well_e.prefab|assets/bundled/prefabs/autospawn/monument/tiny/water_well_c.prefab|assets/bundled/prefabs/autospawn/tunnel-entrance/entrance_bunker_a.prefab|assets/bundled/prefabs/autospawn/tunnel-entrance/entrance_bunker_c.prefab|assets/bundled/prefabs/autospawn/monument/roadside/warehouse.prefab|assets/bundled/prefabs/autospawn/monument/roadside/gas_station_1.prefab|assets/bundled/prefabs/autospawn/monument/roadside/supermarket_1.prefab|assets/bundled/prefabs/autospawn/power substations/small/power_sub_small_2.prefab|assets/bundled/prefabs/autospawn/power substations/small/power_sub_small_1.prefab|assets/bundled/prefabs/autospawn/power substations/big/power_sub_big_2.prefab|assets/bundled/prefabs/autospawn/power substations/
// ... [Code preview truncated due to length. Full source in attached file] ...