C#:
//#define DEBUG
using Facepunch;
using Network;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using Oxide.Core.Configuration;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Core;
using Oxide.Game.Rust;
using Rust;
using System.Collections.Generic;
using System.Collections;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System;
using UnityEngine;
using System.IO;
namespace Oxide.Plugins {
[Info("NTeleportation", "TopPlugin.ru", "1.0.0")]
[Description("Multiple teleportation systems for admin and players")]
class NTeleportation : RustPlugin {
private Dictionary<string, BasePlayer> _ids = new Dictionary<string, BasePlayer>();
private Dictionary<BasePlayer, string> _players = new Dictionary<BasePlayer, string>();
private bool newSave;
private string banditPrefab;
private string outpostPrefab;
private const bool True = true;
private const bool False = false;
private Vector3 Zero = default(Vector3);
private readonly Vector3 Up = Vector3.up;
private readonly Vector3 Down = Vector3.down;
private const string NewLine = "\n";
private const string PermAdmin = "nteleportation.admin";
private const string ConfigDefaultPermVip = "nteleportation.vip";
private const string PermHome = "nteleportation.home";
private const string PermWipeHomes = "nteleportation.wipehomes";
private const string PermCraftHome = "nteleportation.crafthome";
private const string PermDeleteHome = "nteleportation.deletehome";
private const string PermHomeHomes = "nteleportation.homehomes";
private const string PermImportHomes = "nteleportation.importhomes";
private const string PermRadiusHome = "nteleportation.radiushome";
private const string PermCraftTpR = "nteleportation.crafttpr";
private const string PermTpR = "nteleportation.tpr";
private const string PermTp = "nteleportation.tp";
private const string PermTpT = "nteleportation.tpt";
private const string PermTpB = "nteleportation.tpb";
private const string PermTpN = "nteleportation.tpn";
private const string PermTpL = "nteleportation.tpl";
private const string PermTpConsole = "nteleportation.tpconsole";
private const string PermTpHome = "nteleportation.tphome";
private const string PermTpRemove = "nteleportation.tpremove";
private const string PermTpSave = "nteleportation.tpsave";
private const string PermExempt = "nteleportation.exemptfrominterruptcountdown";
private const string PermFoundationCheck = "nteleportation.bypassfoundationcheck";
private DynamicConfigFile dataConvert;
private DynamicConfigFile dataDisabled;
private DynamicConfigFile dataAdmin;
private DynamicConfigFile dataHome;
private DynamicConfigFile dataTPR;
private DynamicConfigFile dataTPT;
private Dictionary<ulong, AdminData> _Admin;
private Dictionary<ulong, HomeData> _Home;
private Dictionary<ulong, TeleportData> _TPR;
private List<string> TPTToggle;
private bool changedAdmin;
private bool changedHome;
private bool changedTPR;
private bool changedTPT;
private float boundary;
private readonly int triggerLayer = LayerMask.GetMask("Trigger");
private readonly int groundLayer = LayerMask.GetMask("Terrain", "World");
private readonly int buildingLayer = LayerMask.GetMask("Terrain", "World", "Construction", "Deployed");
private readonly int blockLayer = LayerMask.GetMask("Construction");
private readonly int builtLayer = LayerMask.GetMask("Construction", "Deployed");
private readonly int deployedLayer = LayerMask.GetMask("Deployed");
private readonly Dictionary<ulong, TeleportTimer> TeleportTimers = new Dictionary<ulong, TeleportTimer>();
private readonly Dictionary<ulong, Timer> PendingRequests = new Dictionary<ulong, Timer>();
private readonly Dictionary<ulong, BasePlayer> PlayersRequests = new Dictionary<ulong, BasePlayer>();
private readonly Dictionary<int, string> ReverseBlockedItems = new Dictionary<int, string>();
private readonly Dictionary<ulong, Vector3> teleporting = new Dictionary<ulong, Vector3>();
private SortedDictionary<string, Vector3> caves = new SortedDictionary<string, Vector3>();
private SortedDictionary<string, MonInfo> monuments = new SortedDictionary<string, MonInfo>();
private bool outpostEnabled;
private bool banditEnabled;
[PluginReference]
private Plugin Clans, Economics, ServerRewards, Friends, CompoundTeleport, ZoneManager, NoEscape, Vanish;
class MonInfo {
public Vector3 Position;
public float Radius;
}
#region Configuration
private static Configuration config;
public class InterruptSettings {
[JsonProperty(PropertyName = "Above Water")]
public bool AboveWater {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Balloon")]
public bool Balloon {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Boats")]
public bool Boats {
get;
set;
}
[JsonProperty(PropertyName = "Cargo Ship")]
public bool Cargo {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Cold")]
public bool Cold {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Excavator")]
public bool Excavator {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Hot")]
public bool Hot {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Hostile")]
public bool Hostile {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Hurt")]
public bool Hurt {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Lift")]
public bool Lift {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Monument")]
public bool Monument {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Ignore Monument Marker Prefab")]
public bool BypassMonumentMarker {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Mounted")]
public bool Mounted {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Oil Rig")]
public bool Oilrig {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Safe Zone")]
public bool Safe {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Swimming")]
public bool Swimming {
get;
set;
}
= False;
}
public class PluginSettings {
[JsonProperty(PropertyName = "Interrupt TP")]
public InterruptSettings Interrupt {
get;
set;
}
= new InterruptSettings();
[JsonProperty(PropertyName = "Block Teleport (NoEscape)")]
public bool BlockNoEscape {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Block Teleport (ZoneManager)")]
public bool BlockZoneFlag {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Chat Name")]
public string ChatName {
get;
set;
}
= "<color=red>Teleportation</color> \n\n";
[JsonProperty(PropertyName = "Chat Steam64ID")]
public ulong ChatID {
get;
set;
}
= 76561199056025689;
[JsonProperty(PropertyName = "Check Boundaries On Teleport X Y Z")]
public bool CheckBoundaries {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Data File Directory (Blank = Default)")]
public string DataFileFolder {
get;
set;
}
= string.Empty;
[JsonProperty(PropertyName = "Draw Sphere On Set Home")]
public bool DrawHomeSphere {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Homes Enabled")]
public bool HomesEnabled {
get;
set;
}
= True;
[JsonProperty(PropertyName = "TPR Enabled")]
public bool TPREnabled {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Strict Foundation Check")]
public bool StrictFoundationCheck {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Cave Distance Small")]
public float CaveDistanceSmall {
get;
set;
}
= 50f;
[JsonProperty(PropertyName = "Cave Distance Medium")]
public float CaveDistanceMedium {
get;
set;
}
= 70f;
[JsonProperty(PropertyName = "Cave Distance Large")]
public float CaveDistanceLarge {
get;
set;
}
= 110f;
[JsonProperty(PropertyName = "Default Monument Size")]
public float DefaultMonumentSize {
get;
set;
}
= 50f;
[JsonProperty(PropertyName = "Minimum Temp")]
public float MinimumTemp {
get;
set;
}
= 0f;
[JsonProperty(PropertyName = "Maximum Temp")]
public float MaximumTemp {
get;
set;
}
= 40f;
[JsonProperty(PropertyName = "Blocked Items", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, string> BlockedItems {
get;
set;
}
= new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
[JsonProperty(PropertyName = "Bypass CMD")]
public string BypassCMD {
get;
set;
}
= "pay";
[JsonProperty(PropertyName = "Use Monument Topology Check")]
public bool MonumentTopologyCheck {
get;
set;
}
[JsonProperty(PropertyName = "Use Cave Topology Check")]
public bool CaveTopologyCheck {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Use Economics")]
public bool UseEconomics {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Use Server Rewards")]
public bool UseServerRewards {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Wipe On Upgrade Or Change")]
public bool WipeOnUpgradeOrChange {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Auto Generate Outpost Location")]
public bool AutoGenOutpost {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Auto Generate Bandit Location")]
public bool AutoGenBandit {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Show Time As Seconds Instead")]
public bool UseSeconds {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Chat Command Color")]
public string ChatCommandColor = "#FFFF00";
[JsonProperty(PropertyName = "Chat Command Argument Color")]
public string ChatCommandArgumentColor = "#FFA500";
}
public class AdminSettings {
[JsonProperty(PropertyName = "Announce Teleport To Target")]
public bool AnnounceTeleportToTarget {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Usable By Admins")]
public bool UseableByAdmins {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Usable By Moderators")]
public bool UseableByModerators {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Location Radius")]
public int LocationRadius {
get;
set;
}
= 25;
[JsonProperty(PropertyName = "Teleport Near Default Distance")]
public int TeleportNearDefaultDistance {
get;
set;
}
= 30;
}
public class HomesSettings {
[JsonProperty(PropertyName = "Homes Limit")]
public int HomesLimit {
get;
set;
}
= 2;
[JsonProperty(PropertyName = "VIP Homes Limits", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, int> VIPHomesLimits {
get;
set;
}
= new Dictionary<string, int> {
{
ConfigDefaultPermVip, 5
}
}
;
[JsonProperty(PropertyName = "Allow Sethome At Specific Monuments", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public List<string> AllowedMonuments {
get;
set;
}
= new List<string> {
"HQM Quarry", "Stone Quarry", "Sulfur Quarry"
}
;
[JsonProperty(PropertyName = "Allow Sethome At All Monuments")]
public bool AllowAtAllMonuments {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Allow TPB")]
public bool AllowTPB {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Cooldown")]
public int Cooldown {
get;
set;
}
= 600;
[JsonProperty(PropertyName = "Countdown")]
public int Countdown {
get;
set;
}
= 15;
[JsonProperty(PropertyName = "Daily Limit")]
public int DailyLimit {
get;
set;
}
= 5;
[JsonProperty(PropertyName = "VIP Daily Limits", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, int> VIPDailyLimits {
get;
set;
}
= new Dictionary<string, int> {
{
ConfigDefaultPermVip, 5
}
}
;
[JsonProperty(PropertyName = "VIP Cooldowns", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, int> VIPCooldowns {
get;
set;
}
= new Dictionary<string, int> {
{
ConfigDefaultPermVip, 5
}
}
;
[JsonProperty(PropertyName = "VIP Countdowns", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, int> VIPCountdowns {
get;
set;
}
= new Dictionary<string, int> {
{
ConfigDefaultPermVip, 5
}
}
;
[JsonProperty(PropertyName = "Location Radius")]
public int LocationRadius {
get;
set;
}
= 25;
[JsonProperty(PropertyName = "Force On Top Of Foundation")]
public bool ForceOnTopOfFoundation {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Check Foundation For Owner")]
public bool CheckFoundationForOwner {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Use Friends")]
public bool UseFriends {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Use Clans")]
public bool UseClans {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Use Teams")]
public bool UseTeams {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Usable Out Of Building Blocked")]
public bool UsableOutOfBuildingBlocked {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Usable Into Building Blocked")]
public bool UsableIntoBuildingBlocked {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Usable From Safe Zone Only")]
public bool UsableFromSafeZoneOnly {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Allow Cupboard Owner When Building Blocked")]
public bool CupOwnerAllowOnBuildingBlocked {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Allow Iceberg")]
public bool AllowIceberg {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Allow Cave")]
public bool AllowCave {
get;
set;
}
[JsonProperty(PropertyName = "Allow Crafting")]
public bool AllowCraft {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Allow Above Foundation")]
public bool AllowAboveFoundation {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Check If Home Is Valid On Listhomes")]
public bool CheckValidOnList {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Pay")]
public int Pay {
get;
set;
}
= 0;
[JsonProperty(PropertyName = "Bypass")]
public int Bypass {
get;
set;
}
= 0;
}
public class TPTSettings {
[JsonProperty(PropertyName = "Use Friends")]
public bool UseFriends {
get;
set;
}
[JsonProperty(PropertyName = "Use Clans")]
public bool UseClans {
get;
set;
}
[JsonProperty(PropertyName = "Use Teams")]
public bool UseTeams {
get;
set;
}
[JsonProperty(PropertyName = "Allow Cave")]
public bool AllowCave {
get;
set;
}
}
public class TPRSettings {
[JsonProperty(PropertyName = "Require Player To Be Friend, Clan Mate, Or Team Mate")]
public bool UseClans_Friends_Teams {
get;
set;
}
[JsonProperty(PropertyName = "Allow Cave")]
public bool AllowCave {
get;
set;
}
[JsonProperty(PropertyName = "Allow TPB")]
public bool AllowTPB {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Cooldown")]
public int Cooldown {
get;
set;
}
= 600;
[JsonProperty(PropertyName = "Countdown")]
public int Countdown {
get;
set;
}
= 15;
[JsonProperty(PropertyName = "Daily Limit")]
public int DailyLimit {
get;
set;
}
= 5;
[JsonProperty(PropertyName = "VIP Daily Limits", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, int> VIPDailyLimits {
get;
set;
}
= new Dictionary<string, int> {
{
ConfigDefaultPermVip, 5
}
}
;
[JsonProperty(PropertyName = "VIP Cooldowns", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, int> VIPCooldowns {
get;
set;
}
= new Dictionary<string, int> {
{
ConfigDefaultPermVip, 5
}
}
;
[JsonProperty(PropertyName = "VIP Countdowns", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, int> VIPCountdowns {
get;
set;
}
= new Dictionary<string, int> {
{
ConfigDefaultPermVip, 5
}
}
;
[JsonProperty(PropertyName = "Request Duration")]
public int RequestDuration {
get;
set;
}
= 30;
[JsonProperty(PropertyName = "Block TPA On Ceiling")]
public bool BlockTPAOnCeiling {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Usable Out Of Building Blocked")]
public bool UsableOutOfBuildingBlocked {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Usable Into Building Blocked")]
public bool UsableIntoBuildingBlocked {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Allow Cupboard Owner When Building Blocked")]
public bool CupOwnerAllowOnBuildingBlocked {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Allow Crafting")]
public bool AllowCraft {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Pay")]
public int Pay {
get;
set;
}
= 0;
[JsonProperty(PropertyName = "Bypass")]
public int Bypass {
get;
set;
}
= 0;
}
public class TownSettings {
[JsonProperty(PropertyName = "Command Enabled")]
public bool Enabled {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Allow TPB")]
public bool AllowTPB {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Allow Cave")]
public bool AllowCave {
get;
set;
}
[JsonProperty(PropertyName = "Cooldown")]
public int Cooldown {
get;
set;
}
= 600;
[JsonProperty(PropertyName = "Countdown")]
public int Countdown {
get;
set;
}
= 15;
[JsonProperty(PropertyName = "Daily Limit")]
public int DailyLimit {
get;
set;
}
= 5;
[JsonProperty(PropertyName = "VIP Daily Limits", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, int> VIPDailyLimits {
get;
set;
}
= new Dictionary<string, int> {
{
ConfigDefaultPermVip, 5
}
}
;
[JsonProperty(PropertyName = "VIP Cooldowns", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, int> VIPCooldowns {
get;
set;
}
= new Dictionary<string, int> {
{
ConfigDefaultPermVip, 5
}
}
;
[JsonProperty(PropertyName = "VIP Countdowns", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, int> VIPCountdowns {
get;
set;
}
= new Dictionary<string, int> {
{
ConfigDefaultPermVip, 5
}
}
;
[JsonProperty(PropertyName = "Location")]
public Vector3 Location {
get;
set;
}
= Vector3.zero;
[JsonProperty(PropertyName = "Locations")]
public List<Vector3> Locations {
get;
set;
}
= new List<Vector3>();
[JsonProperty(PropertyName = "Teleport To Random Location")]
public bool Random {
get;
set;
}
= True;
[JsonProperty(PropertyName = "Usable Out Of Building Blocked")]
public bool UsableOutOfBuildingBlocked {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Allow Crafting")]
public bool AllowCraft {
get;
set;
}
= False;
[JsonProperty(PropertyName = "Pay")]
public int Pay {
get;
set;
}
= 0;
[JsonProperty(PropertyName = "Bypass")]
public int Bypass {
get;
set;
}
= 0;
public bool CanCraft(BasePlayer player, string command) {
return AllowCraft || player.IPlayer.HasPermission($"nteleportation.craft{command}");
}
[JsonIgnore]
public StoredData Teleports = new StoredData();
[JsonIgnore]
public string Command {
get;
set;
}
}
private class Configuration {
[JsonProperty(PropertyName = "Settings")]
public PluginSettings Settings = new PluginSettings();
[JsonProperty(PropertyName = "Admin")]
public AdminSettings Admin = new AdminSettings();
[JsonProperty(PropertyName = "Home")]
public HomesSettings Home = new HomesSettings();
[JsonProperty(PropertyName = "TPT")]
public TPTSettings TPT = new TPTSettings();
[JsonProperty(PropertyName = "TPR")]
public TPRSettings TPR = new TPRSettings();
[JsonProperty(PropertyName = "Dynamic Commands", ObjectCreationHandling = ObjectCreationHandling.Replace)]
public Dictionary<string, TownSettings> DynamicCommands {
get;
set;
}
= DefaultCommands;
}
private static Dictionary<string, TownSettings> DefaultCommands = new Dictionary<string, TownSettings> {
["Town"]
= new TownSettings() {
Random = False
}
, ["Island"] = new TownSettings() {
AllowTPB = false
}
, ["Outpost"] = new TownSettings(), ["Bandit"] = new TownSettings(),
}
;
public void InitializeDynamicCommands() {
banditPrefab = StringPool.Get(2074025910);
outpostPrefab = StringPool.Get(1879405026);
foreach (var entry in config.DynamicCommands) {
if (!entry.Value.Enabled) {
continue;
}
else if (entry.Key.Equals("bandit", StringComparison.OrdinalIgnoreCase)) {
if (CompoundTeleport == null) {
banditEnabled = True;
}
else continue;
}
else if (entry.Key.Equals("outpost", StringComparison.OrdinalIgnoreCase)) {
if (CompoundTeleport == null) {
outpostEnabled = True;
}
else continue;
}
entry.Value.Command = entry.Key;
RegisterCommand(entry.Key, nameof(CommandCustom));
}
RegisterCommand("ntp", nameof(CommandDynamic), PermAdmin);
}
private bool pluginLoaded;
protected override void LoadConfig() {
base.LoadConfig();
bool je = false;
try {
Config.Settings.Converters = new JsonConverter[] {
new UnityVector3Converter()
}
;
config = Config.ReadObject<Configuration>();
}
catch (JsonException ex) {
Puts(ex.Message);
PrintError("Your configuration file contains a json exception error.Please fix and reload.");
LoadDefaultConfig();
je = true;
}
if (config == null) {
LoadDefaultConfig();
}
pluginLoaded = true;
if (!je) {
SaveConfig();
}
}
protected override void SaveConfig() {
if (!pluginLoaded) return;
Config.WriteObject(config);
}
protected override void LoadDefaultConfig() {
config = new Configuration();
Puts("Loaded default configuration.");
}
#endregion
class DisabledData {
[JsonProperty("List of disabled commands")]
public List<string> DisabledCommands = new List<string>();
public DisabledData() {
}
}
DisabledData DisabledCommandData = new DisabledData();
class AdminData {
[JsonProperty("pl")]
public Vector3 PreviousLocation {
get;
set;
}
[JsonProperty("l")]
public Dictionary<string, Vector3> Locations {
get;
set;
}
= new Dictionary<string, Vector3>(StringComparer.OrdinalIgnoreCase);
}
class HomeData {
[JsonProperty("l")]
public Dictionary<string, Vector3> Locations {
get;
set;
}
= new Dictionary<string, Vector3>(StringComparer.OrdinalIgnoreCase);
[JsonProperty("t")]
public TeleportData Teleports {
get;
set;
}
= new TeleportData();
}
public class TeleportData {
[JsonProperty("a")]
public int Amount {
get;
set;
}
[JsonProperty("d")]
public string Date {
get;
set;
}
[JsonProperty("t")]
public int Timestamp {
get;
set;
}
}
class TeleportTimer {
public Timer Timer {
get;
set;
}
public BasePlayer OriginPlayer {
get;
set;
}
public BasePlayer TargetPlayer {
get;
set;
}
}
private enum checkmode {
home, tpr, tpa, town
}
;
protected override void LoadDefaultMessages() {
var en = new Dictionary<string, string> {
{
"ErrorTPR", "Teleporting to {0} is blocked ({1})"
}
, {
"AdminTP", "You teleported to {0}!"
}
, {
"AdminTPTarget", "{0} teleported to you!"
}
, {
"AdminTPPlayers", "You teleported {0} to {1}!"
}
, {
"AdminTPPlayer", "{0} teleported you to {1}!"
}
, {
"AdminTPPlayerTarget", "{0} teleported {1} to you!"
}
, {
"AdminTPCoordinates", "You teleported to {0}!"
}
, {
"AdminTPTargetCoordinates", "You teleported {0} to {1}!"
}
, {
"AdminTPOutOfBounds", "You tried to teleport to a set of coordinates outside the map boundaries!"
}
, {
"AdminTPBoundaries", "X and Z values need to be between -{0} and {0} while the Y value needs to be between -100 and 2000!"
}
, {
"AdminTPLocation", "You teleported to {0}!"
}
, {
"AdminTPLocationSave", "You have saved the current location!"
}
, {
"AdminTPLocationRemove", "You have removed the location {0}!"
}
, {
"AdminLocationList", "The following locations are available:"
}
, {
"AdminLocationListEmpty", "You haven't saved any locations!"
}
, {
"AdminTPBack", "You've teleported back to your previous location!"
}
, {
"AdminTPBackSave", "Your previous location has been saved, use /tpb to teleport back!"
}
, {
"AdminTPTargetCoordinatesTarget", "{0} teleported you to {1}!"
}
, {
"AdminTPConsoleTP", "You were teleported to {0}"
}
, {
"AdminTPConsoleTPPlayer", "You were teleported to {0}"
}
, {
"AdminTPConsoleTPPlayerTarget", "{0} was teleported to you!"
}
, {
"HomeTP", "You teleported to your home '{0}'!"
}
, {
"HomeAdminTP", "You teleported to {0}'s home '{1}'!"
}
, {
"HomeSave", "You have saved the current location as your home!"
}
, {
"HomeNoFoundation", "You can only use a home location on a foundation!"
}
, {
"HomeFoundationNotOwned", "You can't use home on someone else's house."
}
, {
"HomeFoundationUnderneathFoundation", "You can't use home on a foundation that is underneath another foundation."
}
, {
"HomeFoundationNotFriendsOwned", "You or a friend need to own the house to use home!"
}
, {
"HomeRemovedInvalid", "Your home '{0}' was removed because not on a foundation or not owned!"
}
, {
"HighWallCollision", "High Wall Collision!"
}
, {
"HomeRemovedInsideBlock", "Your home '{0}' was removed because inside a foundation!"
}
, {
"HomeRemove", "You have removed your home {0}!"
}
, {
"HomeDelete", "You have removed {0}'s home '{1}'!"
}
, {
"HomeList", "The following homes are available:"
}
, {
"HomeListEmpty", "You haven't saved any homes!"
}
, {
"HomeMaxLocations", "Unable to set your home here, you have reached the maximum of {0} homes!"
}
, {
"HomeQuota", "You have set {0} of the maximum {1} homes!"
}
, {
"HomeTPStarted", "Teleporting to your home {0} in {1} seconds!"
}
, {
"PayToTown", "Standard payment of {0} applies to all {1} teleports!"
}
, {
"PayToTPR", "Standard payment of {0} applies to all tprs!"
}
, {
"HomeTPCooldown", "Your teleport is currently on cooldown.You'll have to wait {0} for your next teleport."
}
, {
"HomeTPCooldownBypass", "Your teleport was currently on cooldown.You chose to bypass that by paying {0} from your balance."
}
, {
"HomeTPCooldownBypassF", "Your teleport is currently on cooldown.You do not have sufficient funds - {0} - to bypass."
}
, {
"HomeTPCooldownBypassP", "You may choose to pay {0} to bypass this cooldown."
}
, {
"HomeTPCooldownBypassP2", "Type /home NAME {0}."
}
, {
"HomeTPLimitReached", "You have reached the daily limit of {0} teleports today!"
}
, {
"HomeTPAmount", "You have {0} home teleports left today!"
}
, {
"HomesListWiped", "You have wiped all the saved home locations!"
}
, {
"HomeTPBuildingBlocked", "You can't set your home if you are not allowed to build in this zone!"
}
, {
"HomeTPSwimming", "You can't set your home while swimming!"
}
, {
"HomeTPCrafting", "You can't set your home while crafting!"
}
, {
"Request", "You've requested a teleport to {0}!"
}
, {
"RequestTarget", "{0} requested to be teleported to you! Use '/tpa' to accept!"
}
, {
"TPR_NoClan_NoFriend_NoTeam", "This command is only available to friends or teammates or clanmates!"
}
, {
"PendingRequest", "You already have a request pending, cancel that request or wait until it gets accepted or times out!"
}
, {
"PendingRequestTarget", "The player you wish to teleport to already has a pending request, try again later!"
}
, {
"NoPendingRequest", "You have no pending teleport request!"
}
, {
"AcceptOnRoof", "You can't accept a teleport while you're on a ceiling, get to ground level!"
}
, {
"Accept", "{0} has accepted your teleport request! Teleporting in {1} seconds!"
}
, {
"AcceptTarget", "You've accepted the teleport request of {0}!"
}
, {
"AcceptToggleOff", "You've disabled automatic /tpa!"
}
, {
"AcceptToggleOn", "You've enabled automatic /tpa!"
}
, {
"NotAllowed", "You are not allowed to use this command!"
}
, {
"Success", "You teleported to {0}!"
}
, {
"SuccessTarget", "{0} teleported to you!"
}
, {
"Cancelled", "Your teleport request to {0} was cancelled!"
}
, {
"CancelledTarget", "{0} teleport request was cancelled!"
}
, {
"TPCancelled", "Your teleport was cancelled!"
}
, {
"TPCancelledTarget", "{0} cancelled teleport!"
}
, {
"TPYouCancelledTarget", "You cancelled {0} teleport!"
}
, {
"TimedOut", "{0} did not answer your request in time!"
}
, {
"TimedOutTarget", "You did not answer {0}'s teleport request in time!"
}
, {
"TargetDisconnected", "{0} has disconnected, your teleport was cancelled!"
}
, {
"TPRCooldown", "Your teleport requests are currently on cooldown.You'll have to wait {0} to send your next teleport request."
}
, {
"TPRCooldownBypass", "Your teleport request was on cooldown.You chose to bypass that by paying {0} from your balance."
}
, {
"TPRCooldownBypassF", "Your teleport is currently on cooldown.You do not have sufficient funds - {0} - to bypass."
}
, {
"TPRCooldownBypassP", "You may choose to pay {0} to bypass this cooldown."
}
, {
"TPMoney", "{0} deducted from your account!"
}
, {
"TPNoMoney", "You do not have {0} in any account!"
}
, {
"TPRCooldownBypassP2", "Type /tpr {0}."
}
, {
"TPRCooldownBypassP2a", "Type /tpr NAME {0}."
}
, {
"TPRLimitReached", "You have reached the daily limit of {0} teleport requests today!"
}
, {
"TPRAmount", "You have {0} teleport requests left today!"
}
, {
"TPRTarget", "Your target is currently not available!"
}
, {
"TPDead", "You can't teleport while being dead!"
}
, {
"TPWounded", "You can't teleport while wounded!"
}
, {
"TPTooCold", "You're too cold to teleport!"
}
, {
"TPTooHot", "You're too hot to teleport!"
}
, {
"TPBoat", "You can't teleport while on a boat!"
}
, {
"TPHostile", "Can't teleport to outpost or bandit when hostile!"
}
, {
"HostileTimer", "Teleport available in {0} minutes."
}
, {
"TPMounted", "You can't teleport while seated!"
}
, //{"TPInsideTerrainFrom", "You can't teleport while inside terrain!"},
//{"TPInsideTerrainTo", "You can't teleport into a location that is inside terrain!"},
{
"TPBuildingBlocked", "You can't teleport while in a building blocked zone!"
}
, {
"TPAboveWater", "You can't teleport while above water!"
}
, {
"TPTargetBuildingBlocked", "You can't teleport in a building blocked zone!"
}
, {
"TPTargetInsideBlock", "You can't teleport into a foundation!"
}
, {
"TPSwimming", "You can't teleport while swimming!"
}
, {
"TPCargoShip", "You can't teleport from the cargo ship!"
}
, {
"TPOilRig", "You can't teleport from the oil rig!"
}
, {
"TPExcavator", "You can't teleport from the excavator!"
}
, {
"TPHotAirBalloon", "You can't teleport to or from a hot air balloon!"
}
, {
"TPLift", "You can't teleport while in an elev
// ... [Code preview truncated due to length. Full source in attached file] ...