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

FREE NTeleportation : 1.6.8 1.6.8

Нет прав для скачивания
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;
// scrap payments to bypass cooldown
// costs to buy teleport
/*
Fixed locations for bandit and outpost being set to monuments underneath them
Adjusted teleport position by an increase of 0.1 meters due to crazy InsideTerrain bugs
Added back API for GetLimitRemaining and GetCooldownRemaining
Added `Play Sounds After Teleport` (false) - set true to enable next option
Added `Sounds To Player After Teleport` (list of 5 different sounds)
Added `Block All Teleporting From Inside Authorized Base` (false)
Added `Global Teleport Cooldown` (0)
Added `Global VIP Teleport Cooldown` (0) - requires: nteleportation.globalcooldownvip
Added API (GetLimitRemaining, GetCooldownRemaining, GetCountdownRemaining) (player, type)
- e.g: int limit = Convert.ToInt32(NTeleportation?.Call("GetLimitRemaining", player, "tpr"));
*/
namespace Oxide.Plugins {
    [Info("NTeleportation", "nivex", "1.6.8")]
    [Description("Multiple teleportation systems for admin and players")]
    class NTeleportation : RustPlugin {
        [PluginReference]
        private Plugin Clans, Economics, ServerRewards, Friends, CompoundTeleport, ZoneManager, NoEscape, Vanish, PopupNotifications;
        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 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 const string PermTpMarker = "nteleportation.tpmarker";
        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 Dictionary<ulong, float> TeleportCooldowns = new Dictionary<ulong, float>();
        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;
        class MonInfo {
            public Vector3 Position;
            public float Radius;
        }
#region Configuration
        private static Configuration config;
        public class InterruptSettings {
            [JsonProperty(PropertyName = "Interrupt Teleport At Specific Monuments", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<string> Monuments {
                get;
                set;
            }
            = new List<string>();
            [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 = "Junkpiles")]
            public bool Junkpiles {
                get;
                set;
            }
            [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";
            [JsonProperty("Enable Popup Support")]
            public bool UsePopup = false;
            [JsonProperty("Block All Teleporting From Inside Authorized Base")]
            public bool BlockAuthorizedTeleporting = false;
            [JsonProperty("TPB Available After X Seconds")]
            public float TPBTime = 0f;
            [JsonProperty("Global Teleport Cooldown")]
            public float Global = 0f;
            [JsonProperty("Global VIP Teleport Cooldown")]
            public float GlobalVIP = 0f;
            [JsonProperty("Play Sounds After Teleport")]
            public bool PlaySounds = false;
            [JsonProperty("Sounds To Play After Teleport", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<string> PrefabSounds = new List<string> {
                "assets/prefabs/misc/xmas/presents/effects/unwrap.prefab", "assets/bundled/prefabs/fx/player/howl.prefab", "assets/content/vehicles/minicopter/debris_effect.prefab", "assets/prefabs/npc/patrol helicopter/damage_effect_debris.prefab", "assets/prefabs/npc/patrol helicopter/effects/rocket_fire.prefab"
            }
            ;
        }
        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", "Ice Lake"
            }
            ;
            [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", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            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);
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                Config.Settings.Converters = new JsonConverter[] {
                    new UnityVector3Converter()
                }
                ;
                config = Config.ReadObject<Configuration>();
                if (config == null) LoadDefaultConfig();
                SaveConfig();
            }
            catch (JsonException ex) {
                Debug.LogException(ex);
                LoadDefaultConfig();
            }
        }
        protected override void SaveConfig() {
            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!"
                }
                
// ... [Code preview truncated due to length. Full source in attached file] ...

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