Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Warp System
- Copyright (c) 2015-2016 <[email protected]>, <http://steamcommunity.com/profiles/76561197983103320/>
- Copyright (c) 2016-2018 <[email protected]>, <http://steamcommunity.com/id/pain45/>
- -------------------------------------------------------------------------------------------------------------------
- This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
- To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/deed.en_US
- -----------------------------------------------------------------------------------------------------------------
- $Id$
- Version 1.9.13 by PaiN 2017-10-09 21:36 (UTC +03:00)
- */
- using System;
- using System.Collections.Generic;
- using Oxide.Core;
- using Oxide.Core.Plugins;
- using UnityEngine;
- namespace Oxide.Plugins
- {
- [Info("Warp System", "PaiN", "1.9.14", ResourceId = 760)]
- [Description("Original Developer: Dathus BR || Create warp points for players.")]
- class WarpSystem : RustPlugin
- {
- [PluginReference]
- Plugin Jail;
- [PluginReference]
- Plugin NoEscape;
- private bool Changed;
- private int cooldown;
- private int warpbacktimer;
- private bool enablecooldown;
- private int backcmdauthlevel;
- private bool WarpIfRunning;
- private bool WarpIfWounded;
- private bool WarpIfSwimming;
- private bool WarpIfRaidBlocked;
- private bool WarpIfBuildingBlocked;
- private bool WarpIfDucking;
- private string backtolastloc;
- private string warplist;
- private string therealreadyis;
- private string warpadded;
- private string youhavetowait;
- private string cantwarpwhilerunning;
- private string cantwarpwhileRaid;
- private string cantwarpwhilewounded;
- private string cantwarpwhilebuildingblocked;
- private string cantwarpwhileducking;
- private string cantwarpwhileswimming;
- private string youhaveteleportedto;
- private string teleportingto;
- private string youhaveremoved;
- object GetConfig(string menu, string datavalue, object defaultValue)
- {
- var data = Config[menu] as Dictionary<string, object>;
- if (data == null)
- {
- data = new Dictionary<string, object>();
- Config[menu] = data;
- Changed = true;
- }
- object value;
- if (!data.TryGetValue(datavalue, out value))
- {
- value = defaultValue;
- data[datavalue] = value;
- Changed = true;
- }
- return value;
- }
- double GetTimeStamp()
- {
- return (DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
- }
- void LoadVariables()
- {
- warpbacktimer = Convert.ToInt32(GetConfig("Settings", "WarpBackTimer", 5));
- cooldown = Convert.ToInt32(GetConfig("Settings", "Cooldown", 120));
- enablecooldown = Convert.ToBoolean(GetConfig("Settings", "EnableCooldown", true));
- backcmdauthlevel = Convert.ToInt32(GetConfig("Settings", "Warp_Back_Atleast_Required_Authlevel", 1));
- WarpIfWounded = Convert.ToBoolean(GetConfig("Settings", "WarpIfWounded", true));
- WarpIfSwimming = Convert.ToBoolean(GetConfig("Settings", "WarpIfSwimming", true));
- WarpIfRunning = Convert.ToBoolean(GetConfig("Settings", "WarpIfRunning", true));
- WarpIfRaidBlocked = Convert.ToBoolean(GetConfig("Settings", "WarpIfRaidBlocked", true));
- WarpIfBuildingBlocked = Convert.ToBoolean(GetConfig("Settings", "WarpIfBuildingBlocked", true));
- WarpIfDucking = Convert.ToBoolean(GetConfig("Settings", "WarpIfDucking", true));
- backtolastloc = Convert.ToString(GetConfig("Messages", "TELEPORTED_TO_LAST_LOCATION", "You have teleported back to your last location!"));
- warplist = Convert.ToString(GetConfig("Messages", "WARP_LIST", "Warp ID: <color=#91FFB5>{2}</color>\nWarp Name: <color=cyan>{0}</color> \nPermission:<color=orange> {1} </color> \nMaxUses Remaining: <color=lime>{3}</color>"));
- therealreadyis = Convert.ToString(GetConfig("Messages", "WARP_EXISTS", "This warp already exists!"));
- warpadded = Convert.ToString(GetConfig("Messages", "WARP_ADDED", "Warp added with Warp Name: <color=#91FFB5>{0}</color>"));
- youhavetowait = Convert.ToString(GetConfig("Messages", "COOLDOWN_MESSAGE", "You have to wait <color=#91FFB5>{0}</color> second(s) before you can teleport again."));
- cantwarpwhilerunning = Convert.ToString(GetConfig("Messages", "CANT_WARP_WHILE_RUNNING", "You can not warp while running!"));
- cantwarpwhilewounded = Convert.ToString(GetConfig("Messages", "CANT_WARP_WHILE_WOUNDED", "You can not warp while you are wounded!"));
- cantwarpwhilebuildingblocked = Convert.ToString(GetConfig("Messages", "CANT_WARP_WHILE_BUILDING_BLOCKED", "You can not warp while you are in a building blocked area!"));
- cantwarpwhileducking = Convert.ToString(GetConfig("Messages", "CANT_WARP_WHILE_DUCKING", "You can not warp while you are ducking!"));
- cantwarpwhileswimming = Convert.ToString(GetConfig("Messages", "CANT_WARP_WHILE_SWIMMING", "You can not warp while you are swimming!"));
- cantwarpwhileRaid = Convert.ToString(GetConfig("Messages", "CANT_WARP_WHILE_RAID", "You can not warp while you are Raid-Blocked"));
- youhaveteleportedto = Convert.ToString(GetConfig("Messages", "TELEPORTED_TO", "You have teleported to <color=#91FFB5>{0}</color>"));
- teleportingto = Convert.ToString(GetConfig("Messages", "TELEPORTING_IN_TO", "Teleporting in <color=orange>{0}</color> second(s) to <color=#91FFB5>{1}</color>"));
- youhaveremoved = Convert.ToString(GetConfig("Messages", "WARP_REMOVED", "You have removed the warp <color=#91FFB5>{0}</color>"));
- if (Changed)
- {
- SaveConfig();
- Changed = false;
- }
- }
- protected override void LoadDefaultConfig()
- {
- Puts("Creating a new configuration file!");
- Config.Clear();
- LoadVariables();
- }
- class StoredData
- {
- public List<WarpInfo> WarpInfo = new List<WarpInfo> { };
- public Dictionary<ulong, double> cantele = new Dictionary<ulong, double>();
- public Dictionary<ulong, OldPosInfo> lastposition = new Dictionary<ulong, OldPosInfo>();
- public Dictionary<ulong, Dictionary<string, int>> maxuses = new Dictionary<ulong, Dictionary<string, int>>();
- }
- class OldPosInfo
- {
- public float OldX;
- public float OldY;
- public float OldZ;
- public OldPosInfo(float x, float y, float z)
- {
- OldX = x;
- OldY = y;
- OldZ = z;
- }
- public OldPosInfo()
- {
- }
- }
- class WarpInfo
- {
- public string WarpName;
- public int WarpId;
- public float WarpX;
- public float WarpY;
- public float WarpZ;
- public string WarpPermissionGroup;
- public int WarpTimer;
- public int WarpMaxUses;
- public string WarpCreatorName;
- public int RandomRange;
- public WarpInfo(string name, BasePlayer player, int timerp, string permissionp, int warpnum, int randomr, int maxusess)
- {
- WarpName = name;
- WarpId = warpnum;
- WarpX = player.transform.position.x;
- WarpMaxUses = maxusess;
- WarpY = player.transform.position.y;
- WarpZ = player.transform.position.z;
- WarpCreatorName = player.displayName;
- WarpTimer = timerp;
- WarpPermissionGroup = permissionp;
- RandomRange = randomr;
- }
- public WarpInfo()
- {
- }
- }
- StoredData storedData;
- void Loaded()
- {
- storedData = Interface.GetMod().DataFileSystem.ReadObject<StoredData>("WarpSystem");
- if (!permission.PermissionExists("warpsystem.admin")) permission.RegisterPermission("warpsystem.admin", this);
- LoadVariables();
- foreach (WarpInfo info in storedData.WarpInfo)
- {
- if (!permission.GroupExists(info.WarpPermissionGroup)) permission.CreateGroup(info.WarpPermissionGroup, "", 0);
- cmd.AddChatCommand(info.WarpId.ToString(), this, "");
- cmd.AddChatCommand(info.WarpName, this, "");
- }
- }
- [ConsoleCommand("warp.wipemaxuses")]
- void cmdWarpMaxUses(ConsoleSystem.Arg arg)
- {
- if (arg.Connection != null && arg.Connection.authLevel < 1)
- {
- arg.ReplyWith("You cant use that command!");
- return;
- }
- storedData.maxuses.Clear();
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- }
- [ConsoleCommand("warp.playerto")]
- void cmdWarpPlayerr(ConsoleSystem.Arg arg)
- {
- BasePlayer target = BasePlayer.Find(arg.Args[0]);
- if ((arg.Args == null) || (arg.Args != null && arg.Args.Length == 0))
- {
- arg.ReplyWith("warp.playerto <PlayerName> <WarpName>");
- return;
- }
- if (arg.Connection != null && arg.Connection.authLevel < 1)
- {
- arg.ReplyWith("You cant use that command!");
- return;
- }
- if (target == null)
- {
- arg.ReplyWith("Player not found!");
- return;
- }
- ulong steamID = target.userID;
- double nextteletime;
- if (enablecooldown == true)
- {
- if (storedData.cantele.TryGetValue(steamID, out nextteletime))
- {
- if (GetTimeStamp() >= nextteletime)
- {
- storedData.cantele[steamID] = GetTimeStamp() + cooldown;
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- goto Finish;
- }
- else
- {
- int nexttele = Convert.ToInt32(nextteletime - GetTimeStamp());
- SendReply(target, youhavetowait, nexttele.ToString().Replace("-", ""));
- return;
- }
- }
- else
- {
- storedData.cantele.Add(steamID, GetTimeStamp() + cooldown);
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- goto Finish;
- }
- }
- Finish:
- foreach (WarpInfo info in storedData.WarpInfo)
- {
- if (info.WarpName.ToLower() == arg.Args[1].ToLower() || info.WarpId.ToString().ToLower() == arg.Args[1].ToLower())
- {
- bool IsRaidBlocked = Convert.ToBoolean(NoEscape?.Call("IsRaidBlocked", target));
- SendReply(target, teleportingto, info.WarpTimer, info.WarpName);
- arg.ReplyWith($"Teleporting {target.displayName} to {info.WarpName} in {info.WarpTimer}");
- timer.Once(info.WarpTimer, () =>
- {
- if (WarpIfRunning == false && target.IsRunning())
- {
- SendReply(target, cantwarpwhilerunning);
- return;
- }
- if (WarpIfWounded == false && target.IsWounded())
- {
- SendReply(target, cantwarpwhilewounded);
- return;
- }
- if (WarpIfSwimming == false && target.IsSwimming())
- {
- SendReply(target, cantwarpwhileswimming);
- return;
- }
- if (WarpIfRaidBlocked == false && IsRaidBlocked)
- {
- SendReply(target, cantwarpwhileRaid);
- return;
- }
- if (WarpIfBuildingBlocked == false & !target.CanBuild())
- {
- SendReply(target, cantwarpwhilebuildingblocked);
- return;
- }
- if (WarpIfDucking == false && target.IsDucked())
- {
- SendReply(target, cantwarpwhileducking);
- return;
- }
- ForcePlayerPos(target, new Vector3(info.WarpX, info.WarpY, info.WarpZ));
- SendReply(target, youhaveteleportedto, info.WarpName);
- });
- }
- }
- }
- /*[ConsoleCommand("test.it")]
- void cmdTestIT(ConsoleSystem.Arg arg)
- {
- arg.ReplyWith(new Random.Next(1,5).ToString());
- }*/
- int GetNewId()
- {
- int id = 0;
- foreach (WarpInfo info in storedData.WarpInfo)
- {
- id = Math.Max(0, info.WarpId);
- }
- return id + 1;
- }
- int GetRandomId(BasePlayer player)
- {
- int randomid = 0;
- foreach (WarpInfo info in storedData.WarpInfo)
- {
- if (permission.UserHasGroup(player.userID.ToString(), info.WarpPermissionGroup) || info.WarpPermissionGroup == "all")
- {
- randomid = UnityEngine.Random.Range(0, Math.Max(0, info.WarpId));
- }
- }
- return randomid + 1;
- }
- [ChatCommand("warp")]
- void cmdWarp(BasePlayer player, string cmdd, string[] args)
- {
- if (args.Length == 0)
- {
- player.SendConsoleCommand("chat.say \"/warp help\" ");
- return;
- }
- bool isprisoner = Convert.ToBoolean(Jail?.Call("IsPrisoner", player));
- bool IsRaidBlocked = Convert.ToBoolean(NoEscape?.Call("IsRaidBlocked", player));
- ulong steamId = player.userID;
- double nextteletime;
- switch (args[0])
- {
- case "limit":
- SendReply(player, "<color=#91FFB5>Current Warp Limits</color>");
- if (storedData.cantele.TryGetValue(steamId, out nextteletime))
- {
- int nexttele = Convert.ToInt32(nextteletime - GetTimeStamp());
- if (nexttele <= 0)
- {
- nexttele = 0;
- }
- SendReply(player, $"You will be able to warp again in {nexttele} seconds");
- }
- SendReply(player, $"Warp Cooldown: <color=orage>{cooldown}</color>");
- SendReply(player, $"Warp Cooldown Enabled: <color=orage>{enablecooldown}</color>");
- SendReply(player, "<color=#91FFB5>*************</color>");
- break;
- case "back":
- if (isprisoner)
- {
- SendReply(player, "You cant teleport out of the jail!");
- return;
- }
- if (player.net.connection.authLevel >= backcmdauthlevel)
- {
- SendReply(player, "Teleporting to you last saved locations in {0} seconds.", warpbacktimer.ToString());
- timer.Once(warpbacktimer, () =>
- {
- if (WarpIfRunning == false && player.IsRunning())
- {
- SendReply(player, cantwarpwhilerunning);
- return;
- }
- if (WarpIfWounded == false && player.IsWounded())
- {
- SendReply(player, cantwarpwhilewounded);
- return;
- }
- if (WarpIfSwimming == false && player.IsSwimming())
- {
- SendReply(player, cantwarpwhileswimming);
- return;
- }
- if (WarpIfRaidBlocked == false && IsRaidBlocked)
- {
- SendReply(player, cantwarpwhileRaid);
- return;
- }
- if (WarpIfBuildingBlocked == false & !player.CanBuild())
- {
- SendReply(player, cantwarpwhilebuildingblocked);
- return;
- }
- if (WarpIfDucking == false && player.IsDucked())
- {
- SendReply(player, cantwarpwhileducking);
- return;
- }
- ForcePlayerPos(player, new Vector3(storedData.lastposition[steamId].OldX, storedData.lastposition[steamId].OldY, storedData.lastposition[steamId].OldZ));
- SendReply(player, backtolastloc);
- storedData.lastposition.Remove(steamId);
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- });
- }
- break;
- case "random":
- if (isprisoner)
- {
- SendReply(player, "You cant teleport out of the jail!");
- return;
- }
- player.SendConsoleCommand($"chat.say \"/warp to {GetRandomId(player)}\" ");
- break;
- case "all":
- if (!permission.UserHasPermission(player.userID.ToString(), "warpsystem.admin"))
- {
- SendReply(player, "You do not have permission to use this command!");
- return;
- }
- if (args.Length == 2)
- {
- foreach (BasePlayer current in BasePlayer.activePlayerList)
- {
- foreach (WarpInfo info in storedData.WarpInfo)
- {
- if (info.WarpName.ToLower() == args[1].ToLower() || info.WarpId.ToString() == args[1])
- {
- ForcePlayerPos(current, new Vector3(info.WarpX, info.WarpY, info.WarpZ));
- SendReply(current, "You got teleported to <color=#91FFB5>" + info.WarpName + "</color> by <color=orange>" + player.displayName + "</color>");
- }
- }
- }
- }
- else if (args.Length == 3 && args[1] == "sleepers")
- {
- foreach (BasePlayer sleepers in BasePlayer.sleepingPlayerList)
- {
- foreach (WarpInfo info in storedData.WarpInfo)
- {
- if (info.WarpName.ToLower() == args[2].ToLower() || info.WarpId.ToString() == args[2])
- {
- ForcePlayerPos(sleepers, new Vector3(info.WarpX, info.WarpY, info.WarpZ));
- //SendReply(player, "You got teleported to <color=#91FFB5>" + info.WarpName + "</color> by <color=orange>" + player.displayName + "</color>");
- }
- }
- }
- }
- else
- {
- SendReply(player, "<color=#91FFB5>Teleport all online players</color>: \n /warp all <WarpName>");
- SendReply(player, "<color=#91FFB5>Teleport all sleepers</color>: \n /warp all sleepers <WarpName>");
- return;
- }
- break;
- case "wipe":
- if (!permission.UserHasPermission(player.userID.ToString(), "warpsystem.admin"))
- {
- SendReply(player, "You do not have permission to use this command!");
- return;
- }
- storedData.WarpInfo.Clear();
- storedData.cantele.Clear();
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- SendReply(player, "You have wiped all the teleports!");
- break;
- case "list":
- SendReply(player, "<color=#91FFB5>Current Warps</color>");
- string maxusesrem;
- foreach (WarpInfo info in storedData.WarpInfo)
- {
- if (permission.UserHasGroup(steamId.ToString(), info.WarpPermissionGroup) || info.WarpPermissionGroup == "all")
- {
- if (info.WarpMaxUses == 0)
- {
- maxusesrem = "<color=red>UNLIMITED</color>";
- }
- else if (!storedData.maxuses.ContainsKey(steamId))
- {
- maxusesrem = info.WarpMaxUses.ToString();
- }
- else
- maxusesrem = storedData.maxuses[steamId][info.WarpName].ToString();
- SendReply(player, warplist, info.WarpName, info.WarpPermissionGroup, info.WarpId, maxusesrem);
- SendReply(player, "<color=#91FFB5>*************</color>");
- }
- }
- SendReply(player, "<color=#91FFB5>*************</color>");
- break;
- case "add":
- if (!permission.UserHasPermission(player.userID.ToString(), "warpsystem.admin"))
- {
- SendReply(player, "You do not have permission to use this command!");
- return;
- }
- if (args.Length != 6)
- {
- SendReply(player, "/warp <add> <WarpName> <WarpTimer> <WarpRange> <WarpMaxUses> <WarpPermissionGroup>");
- return;
- }
- foreach (WarpInfo info in storedData.WarpInfo)
- {
- if (args[1].ToLower() == info.WarpName.ToLower())
- {
- SendReply(player, therealreadyis);
- return;
- }
- }
- string permissionp = args[5];
- string name = args[1];
- int warpnum;
- int timerp = Convert.ToInt32(args[2]);
- int randomr = Convert.ToInt32(args[3]);
- int maxusess = Convert.ToInt32(args[4]);
- if (storedData.WarpInfo == null)
- {
- warpnum = 1;
- }
- else
- {
- warpnum = GetNewId();
- }
- var data = new WarpInfo(name, player, timerp, permissionp, warpnum, randomr, maxusess);
- storedData.WarpInfo.Add(data);
- SendReply(player, warpadded, name);
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- if (!permission.GroupExists(args[5])) permission.CreateGroup(args[5], "", 0);
- cmd.AddChatCommand(name, this, "");
- cmd.AddChatCommand(warpnum.ToString(), this, "");
- break;
- case "to":
- if (args.Length != 2)
- {
- SendReply(player, "/warp to <WarpName> || /warplist");
- return;
- }
- if (isprisoner)
- {
- SendReply(player, "You cant teleport out of the jail!");
- return;
- }
- foreach (WarpInfo info in storedData.WarpInfo)
- {
- if (info.WarpName.ToLower() == args[1].ToLower() || info.WarpId.ToString() == args[1])
- {
- if (info.WarpPermissionGroup == "all" || permission.UserHasGroup(steamId.ToString(), info.WarpPermissionGroup))
- {
- if (info.WarpMaxUses > 0)
- {
- if (!storedData.maxuses.ContainsKey(steamId))
- {
- storedData.maxuses.Add(
- steamId,
- new Dictionary<string, int>{
- {info.WarpName, 1}
- }
- );
- }
- if (storedData.maxuses[steamId][info.WarpName] == 5)
- {
- SendReply(player, "You have reached the max uses for this Warp!");
- return;
- }
- if (storedData.maxuses.ContainsKey(steamId))
- {
- storedData.maxuses[steamId][info.WarpName] = storedData.maxuses[steamId][info.WarpName] + 1;
- }
- }
- if (enablecooldown == true)
- {
- if (storedData.cantele.TryGetValue(steamId, out nextteletime))
- {
- if (GetTimeStamp() >= nextteletime)
- {
- storedData.cantele[steamId] = GetTimeStamp() + cooldown;
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- goto Finish;
- }
- else
- {
- int nexttele = Convert.ToInt32(GetTimeStamp() - nextteletime);
- SendReply(player, youhavetowait, nexttele.ToString().Replace("-", ""));
- return;
- }
- }
- else
- {
- storedData.cantele.Add(steamId, GetTimeStamp() + cooldown);
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- goto Finish;
- }
- }
- Finish:
- if (storedData.lastposition.ContainsKey(steamId) | !storedData.lastposition.ContainsKey(steamId))
- {
- storedData.lastposition.Remove(steamId);
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- float x = player.transform.position.x;
- float y = player.transform.position.y;
- float z = player.transform.position.z;
- var oldinfo = new OldPosInfo(x, y, z);
- storedData.lastposition.Add(steamId, oldinfo);
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- }
- SendReply(player, teleportingto, info.WarpTimer, info.WarpName);
- timer.Once(info.WarpTimer, () =>
- {
- if (WarpIfRunning == false && player.IsRunning())
- {
- SendReply(player, cantwarpwhilerunning);
- return;
- }
- if (WarpIfWounded == false && player.IsWounded())
- {
- SendReply(player, cantwarpwhilewounded);
- return;
- }
- if (WarpIfSwimming == false && player.IsSwimming())
- {
- SendReply(player, cantwarpwhileswimming);
- return;
- }
- if (WarpIfRaidBlocked == false && IsRaidBlocked)
- {
- SendReply(player, cantwarpwhileRaid);
- return;
- }
- if (WarpIfBuildingBlocked == false & !player.CanBuild())
- {
- SendReply(player, cantwarpwhilebuildingblocked);
- return;
- }
- if (WarpIfDucking == false && player.IsDucked())
- {
- SendReply(player, cantwarpwhileducking);
- return;
- }
- int posx = UnityEngine.Random.Range(Convert.ToInt32(info.WarpX), info.RandomRange);
- int posz = UnityEngine.Random.Range(Convert.ToInt32(info.WarpZ), info.RandomRange);
- if (info.RandomRange == 0)
- {
- ForcePlayerPos(player, new Vector3(info.WarpX, info.WarpY, info.WarpZ));
- }
- else
- ForcePlayerPos(player, new Vector3(posx, info.WarpY, posz));
- SendReply(player, youhaveteleportedto, info.WarpName);
- });
- }
- else
- {
- SendReply(player, "You are not allowed to use this warp!");
- return;
- }
- }
- }
- break;
- case "help":
- if (permission.UserHasPermission(player.userID.ToString(), "warpsystem.admin"))
- {
- SendReply(player, "<color=#91FFB5>Available Commands</color>");
- SendReply(player, "<color=#91FFB5>-</color> /warp <add> <WarpName> <WarpTimer> <WarpRange> <WarpMaxUses> <WarpPermissionGroup>");
- SendReply(player, "<color=#91FFB5>-</color> /warp limit");
- SendReply(player, "<color=#91FFB5>-</color> /warp random");
- SendReply(player, "<color=#91FFB5>-</color> /warp remove <WarpName>");
- SendReply(player, "<color=#91FFB5>-</color> /warp wipe");
- SendReply(player, "<color=#91FFB5>-</color> /warp list");
- SendReply(player, "<color=#91FFB5>-</color> /warp to <WarpName> || /warp list");
- SendReply(player, "<color=#91FFB5>-</color> /<WarpName> => A shorter version of /warp to <WarpName> || /warp list");
- SendReply(player, "<color=#91FFB5>Teleport all online players</color>: \n<color=#91FFB5>-</color> /warp all <WarpName>");
- SendReply(player, "<color=#91FFB5>Teleport all sleepers</color>: \n<color=#91FFB5>-</color> /warp all sleepers <WarpName>");
- }
- else
- {
- SendReply(player, "<color=#91FFB5>Available Commands</color>");
- SendReply(player, "<color=#91FFB5>-</color> /warp list");
- SendReply(player, "<color=#91FFB5>-</color> /warp limit");
- SendReply(player, "<color=#91FFB5>-</color> /warp random");
- SendReply(player, "<color=#91FFB5>-</color> /warp to <WarpName> || /warp list");
- SendReply(player, "<color=#91FFB5>-</color> /<WarpName> => A shorter version of /warp to <WarpName> || /warp list");
- }
- break;
- case "remove":
- if (!permission.UserHasPermission(player.userID.ToString(), "warpsystem.admin"))
- {
- SendReply(player, "You do not have permission to use this command!");
- return;
- }
- if (args.Length != 2)
- {
- SendReply(player, "/warp remove <WarpName>");
- return;
- }
- foreach (WarpInfo info in storedData.WarpInfo)
- {
- if (info.WarpName == args[1])
- {
- storedData.WarpInfo.Remove(info);
- SendReply(player, youhaveremoved, info.WarpName);
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- break;
- }
- }
- break;
- }
- }
- /*void Unloaded()
- {
- storedData.cantele.Clear();
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- }*/
- void OnServerCommand(ConsoleSystem.Arg arg)
- {
- if (arg == null) return;
- if (arg.Connection == null) return;
- if (arg.Connection.player == null) return;
- if (arg.cmd == null) return;
- if (arg.cmd.Name == null) return;
- BasePlayer player = (BasePlayer)arg.Connection.player;
- ulong steamId = player.userID;
- double nextteletime;
- bool IsRaidBlocked = Convert.ToBoolean(NoEscape?.Call("IsRaidBlocked", player));
- string cmd = arg.cmd.FullName;
- string text = arg.GetString(0, "text");
- if (cmd == "chat.say" && text.StartsWith("/"))
- {
- foreach (WarpInfo info in storedData.WarpInfo)
- {
- if (text == "/" + info.WarpName || text == "/" + info.WarpId)
- {
- if (info.WarpPermissionGroup == "all" || permission.UserHasGroup(steamId.ToString(), info.WarpPermissionGroup))
- {
- if (enablecooldown == true)
- {
- if (storedData.cantele.TryGetValue(steamId, out nextteletime))
- {
- if (GetTimeStamp() > nextteletime)
- {
- storedData.cantele[steamId] = GetTimeStamp() + cooldown;
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- goto Finish;
- }
- else
- {
- int nexttele = Convert.ToInt32(GetTimeStamp() - nextteletime);
- SendReply(player, youhavetowait, nexttele.ToString().Replace("-", ""));
- return;
- }
- }
- else
- {
- storedData.cantele.Add(steamId, GetTimeStamp() + cooldown);
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- goto Finish;
- }
- }
- Finish:
- if (storedData.lastposition.ContainsKey(steamId) | !storedData.lastposition.ContainsKey(steamId))
- {
- storedData.lastposition.Remove(steamId);
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- float x = player.transform.position.x;
- float y = player.transform.position.y;
- float z = player.transform.position.z;
- var oldinfo = new OldPosInfo(x, y, z);
- storedData.lastposition.Add(steamId, oldinfo);
- Interface.GetMod().DataFileSystem.WriteObject("WarpSystem", storedData);
- }
- SendReply(player, teleportingto, info.WarpTimer, info.WarpName);
- timer.Once(info.WarpTimer, () =>
- {
- if (WarpIfRunning == false && player.IsRunning())
- {
- SendReply(player, cantwarpwhilerunning);
- return;
- }
- if (WarpIfWounded == false && player.IsWounded())
- {
- SendReply(player, cantwarpwhilewounded);
- return;
- }
- if (WarpIfSwimming == false && player.IsSwimming())
- {
- SendReply(player, cantwarpwhileswimming);
- return;
- }
- if (WarpIfRaidBlocked == false && IsRaidBlocked)
- {
- SendReply(player, cantwarpwhileRaid);
- return;
- }
- if (WarpIfBuildingBlocked == false & !player.CanBuild())
- {
- SendReply(player, cantwarpwhilebuildingblocked);
- return;
- }
- if (WarpIfDucking == false && player.IsDucked())
- {
- SendReply(player, cantwarpwhileducking);
- return;
- }
- ForcePlayerPos(player, new Vector3(info.WarpX, info.WarpY, info.WarpZ));
- SendReply(player, youhaveteleportedto, info.WarpName);
- });
- }
- else
- {
- SendReply(player, "You are not allowed to use this warp!");
- return;
- }
- }
- }
- }
- }
- void ForcePlayerPos(BasePlayer player, Vector3 xyz)
- {
- player.SetPlayerFlag(BasePlayer.PlayerFlags.Sleeping, true);
- if (!BasePlayer.sleepingPlayerList.Contains(player)) BasePlayer.sleepingPlayerList.Add(player);
- player.CancelInvoke("InventoryUpdate");
- player.inventory.crafting.CancelAll(true);
- player.MovePosition(xyz);
- player.ClientRPCPlayer(null, player, "ForcePositionTo", xyz);
- player.SetPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot, true);
- player.UpdateNetworkGroup();
- player.SendNetworkUpdateImmediate(false);
- player.ClientRPCPlayer(null, player, "StartLoading");
- player.SendFullSnapshot();
- }
- }
- }
Add Comment
Please, Sign In to add comment