diff --git a/README.md b/README.md index 911c831..150aa75 100644 --- a/README.md +++ b/README.md @@ -25,10 +25,10 @@ The only permission this plugin has is `tpa` for all teleportation actions (send gray + https://i.imgur.com/wr879ca.png 90 3 90 - false false 30 false @@ -42,32 +42,34 @@ The only permission this plugin has is `tpa` for all teleportation actions (send ```xml - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ``` diff --git a/Teleportation/Commands/TPACommand.cs b/Teleportation/Commands/TPACommand.cs index f6634ed..b4f1f62 100644 --- a/Teleportation/Commands/TPACommand.cs +++ b/Teleportation/Commands/TPACommand.cs @@ -1,6 +1,5 @@ using RestoreMonarchy.Teleportation.Utils; using Rocket.API; -using Rocket.Unturned.Chat; using Rocket.Unturned.Player; using System.Collections.Generic; @@ -8,48 +7,56 @@ namespace RestoreMonarchy.Teleportation.Commands { public class TPACommand : IRocketCommand { - public AllowedCaller AllowedCaller => AllowedCaller.Player; - - public string Name => "tpa"; - - public string Help => "Teleportation request command"; - - public string Syntax => "(player/accept/deny/cancel)"; - - public List Aliases => new List(); - - public List Permissions => new List(); + private TeleportationPlugin pluginInstance => TeleportationPlugin.Instance; public void Execute(IRocketPlayer caller, string[] command) { if (command.Length < 1) { - UnturnedChat.Say(caller, TeleportationPlugin.Instance.Translate("TPAHelp"), TeleportationPlugin.Instance.MessageColor); + pluginInstance.SendMessageToPlayer(caller, "TPAHelp"); return; } + UnturnedPlayer player = (UnturnedPlayer)caller; + string cmd = command[0].ToLower(); if (cmd == "accept" || cmd == "a") { - TeleportationPlugin.Instance.AcceptTPARequest((UnturnedPlayer)caller); - } else if (cmd == "cancel" || cmd == "c") + pluginInstance.AcceptTPARequest(player); + } + else if (cmd == "cancel" || cmd == "c") { - TeleportationPlugin.Instance.CancelTPARequest((UnturnedPlayer)caller); - } else if (cmd == "deny" || cmd == "d") + pluginInstance.CancelTPARequest(player); + } + else if (cmd == "deny" || cmd == "d") { - TeleportationPlugin.Instance.DenyTPARequest((UnturnedPlayer)caller); - } else + pluginInstance.DenyTPARequest(player); + } + else { - var target = UnturnedPlayer.FromName(cmd); + UnturnedPlayer target = UnturnedPlayer.FromName(cmd); if (target != null) { - TeleportationPlugin.Instance.SendTPARequest((UnturnedPlayer)caller, target); - } else + pluginInstance.SendTPARequest(player, target); + } + else { - UnturnedChat.Say(caller, TeleportationPlugin.Instance.Translate("TargetNotFound"), TeleportationPlugin.Instance.MessageColor); + pluginInstance.SendMessageToPlayer(caller, "TargetNotFound"); } } } + + public AllowedCaller AllowedCaller => AllowedCaller.Player; + + public string Name => "tpa"; + + public string Help => "Teleportation request command"; + + public string Syntax => "(player/accept/deny/cancel)"; + + public List Aliases => new List(); + + public List Permissions => new List(); } } diff --git a/Teleportation/Models/TPARequest.cs b/Teleportation/Models/TPARequest.cs index 829c701..3e6a920 100644 --- a/Teleportation/Models/TPARequest.cs +++ b/Teleportation/Models/TPARequest.cs @@ -1,6 +1,5 @@ using RestoreMonarchy.Teleportation.Utils; using Rocket.Core.Utils; -using Rocket.Unturned.Chat; using Rocket.Unturned.Player; using Steamworks; using System; @@ -9,19 +8,22 @@ namespace RestoreMonarchy.Teleportation.Models { public class TPARequest { - private TeleportationPlugin plugin => TeleportationPlugin.Instance; + private TeleportationPlugin pluginInstance => TeleportationPlugin.Instance; public TPARequest(CSteamID sender, CSteamID target) { Sender = sender; Target = target; - double duration = plugin.Configuration.Instance.TPADuration; + double duration = pluginInstance.Configuration.Instance.TPADuration; if (duration == 0) { duration = 30; } ExpireDate = DateTime.Now.AddSeconds(duration); + + SenderPlayer = UnturnedPlayer.FromCSteamID(sender); + TargetPlayer = UnturnedPlayer.FromCSteamID(target); } public TPARequest() { } @@ -31,22 +33,22 @@ public TPARequest() { } public DateTime ExpireDate { get; set; } public bool IsCanceled { get; private set; } - public UnturnedPlayer SenderPlayer => UnturnedPlayer.FromCSteamID(Sender); - public UnturnedPlayer TargetPlayer => UnturnedPlayer.FromCSteamID(Target); + public UnturnedPlayer SenderPlayer { get; set; } + public UnturnedPlayer TargetPlayer { get; set; } public bool IsExpired => ExpireDate < DateTime.Now; public void Execute(double delay) - { + { if (delay > 0) { - UnturnedChat.Say(Sender, plugin.Translate("TPADelay", TargetPlayer.DisplayName, delay), plugin.MessageColor); - if (plugin.Configuration.Instance.CancelOnMove) + pluginInstance.SendMessageToPlayer(SenderPlayer, "TPADelay", TargetPlayer.DisplayName, delay); + if (pluginInstance.Configuration.Instance.CancelOnMove) { - plugin.MovementDetector.AddPlayer(SenderPlayer.Player, () => + pluginInstance.MovementDetector.AddPlayer(SenderPlayer.Player, () => { - UnturnedChat.Say(Sender, plugin.Translate("TPACanceledYouMoved"), plugin.MessageColor); - UnturnedChat.Say(Target, plugin.Translate("TPACanceledSenderMoved", SenderPlayer.DisplayName), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(SenderPlayer, "TPACanceledYouMoved"); + pluginInstance.SendMessageToPlayer(TargetPlayer, "TPACanceledSenderMoved", SenderPlayer.DisplayName); Cancel(); }); } @@ -55,66 +57,83 @@ public void Execute(double delay) TaskDispatcher.QueueOnMainThread(() => { if (IsCanceled) + { return; + } - plugin.MovementDetector.RemovePlayer(SenderPlayer.Player); + pluginInstance.MovementDetector.RemovePlayer(SenderPlayer.Player); if (!Validate(true)) { - plugin.Cooldowns.Remove(Sender); + pluginInstance.Cooldowns.Remove(Sender); return; } - if (plugin.Configuration.Instance.UseUnsafeTeleport) + if (pluginInstance.Configuration.Instance.UseUnsafeTeleport) { SenderPlayer.Player.teleportToLocationUnsafe(TargetPlayer.Position, TargetPlayer.Rotation); } else { SenderPlayer.Teleport(TargetPlayer); - } - - UnturnedChat.Say(Sender, plugin.Translate("TPASuccess", TargetPlayer.DisplayName), plugin.MessageColor); + } + + pluginInstance.SendMessageToPlayer(SenderPlayer, "TPASuccess", TargetPlayer.DisplayName); }, (float)delay); } public bool Validate(bool isFinal = false) { - var plugin = TeleportationPlugin.Instance; + var pluginInstance = TeleportationPlugin.Instance; - if (plugin.IsPlayerInCombat(SenderPlayer.CSteamID)) + if (pluginInstance.IsPlayerInCombat(SenderPlayer.CSteamID)) { - UnturnedChat.Say(SenderPlayer, plugin.Translate("TPAWhileCombatYou"), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(SenderPlayer, "TPAWhileCombatYou"); if (isFinal) - UnturnedChat.Say(TargetPlayer, plugin.Translate("TPAWhileCombat", SenderPlayer.DisplayName), plugin.MessageColor); + { + pluginInstance.SendMessageToPlayer(TargetPlayer, "TPAWhileCombat", SenderPlayer.DisplayName); + } + return false; } - else if (plugin.IsPlayerInRaid(SenderPlayer.CSteamID)) + else if (pluginInstance.IsPlayerInRaid(SenderPlayer.CSteamID)) { - UnturnedChat.Say(SenderPlayer, plugin.Translate("TPAWhileRaidYou"), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(SenderPlayer, "TPAWhileRaidYou"); if (isFinal) - UnturnedChat.Say(TargetPlayer, plugin.Translate("TPAWhileRaid", SenderPlayer.DisplayName), plugin.MessageColor); + { + pluginInstance.SendMessageToPlayer(TargetPlayer, "TPAWhileRaid", SenderPlayer.DisplayName); + } + return false; } else if (SenderPlayer.Dead || (TargetPlayer.Dead && isFinal)) { - UnturnedChat.Say(SenderPlayer, plugin.Translate("TPADead", TargetPlayer.DisplayName), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(SenderPlayer, "TPADead", TargetPlayer.DisplayName); if (isFinal) - UnturnedChat.Say(TargetPlayer, plugin.Translate("TPADead", SenderPlayer.DisplayName), plugin.MessageColor); + { + pluginInstance.SendMessageToPlayer(TargetPlayer, "TPADead", SenderPlayer.DisplayName); + } + return false; } - else if (plugin.IsPlayerInCave(TargetPlayer)) + else if (pluginInstance.IsPlayerInCave(TargetPlayer)) { - UnturnedChat.Say(SenderPlayer, plugin.Translate("TPACave", TargetPlayer.DisplayName), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(SenderPlayer, "TPACave", TargetPlayer.DisplayName); if (isFinal) - UnturnedChat.Say(TargetPlayer, plugin.Translate("TPACaveYou", SenderPlayer.DisplayName), plugin.MessageColor); + { + pluginInstance.SendMessageToPlayer(TargetPlayer, "TPACaveYou", SenderPlayer.DisplayName); + } + return false; } else if (SenderPlayer.IsInVehicle) { - UnturnedChat.Say(SenderPlayer, plugin.Translate("TPAVehicleYou"), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(SenderPlayer, "TPAVehicleYou"); if (isFinal) - UnturnedChat.Say(TargetPlayer, plugin.Translate("TPAVehicle", SenderPlayer.DisplayName), plugin.MessageColor); + { + pluginInstance.SendMessageToPlayer(TargetPlayer, "TPAVehicle", SenderPlayer.DisplayName); + } + return false; } diff --git a/Teleportation/Teleportation.csproj b/Teleportation/Teleportation.csproj index 45fb4df..76b2eb8 100644 --- a/Teleportation/Teleportation.csproj +++ b/Teleportation/Teleportation.csproj @@ -4,7 +4,7 @@ net48 latest RestoreMonarchy.Teleportation - 1.8.1 + 1.8.2 diff --git a/Teleportation/TeleportationConfiguration.cs b/Teleportation/TeleportationConfiguration.cs index 414b97f..dc0d05f 100644 --- a/Teleportation/TeleportationConfiguration.cs +++ b/Teleportation/TeleportationConfiguration.cs @@ -5,6 +5,7 @@ namespace RestoreMonarchy.Teleportation public class TeleportationConfiguration : IRocketPluginConfiguration { public string MessageColor { get; set; } + public string MessageIconUrl { get; set; } = "https://i.imgur.com/wr879ca.png"; public double TPACooldown { get; set; } public double TPADelay { get; set; } public double TPADuration { get; set; } @@ -21,6 +22,7 @@ public class TeleportationConfiguration : IRocketPluginConfiguration public void LoadDefaults() { MessageColor = "gray"; + MessageIconUrl = "https://i.imgur.com/wr879ca.png"; TPACooldown = 90; TPADelay = 3; TPADuration = 90; diff --git a/Teleportation/TeleportationPlugin.cs b/Teleportation/TeleportationPlugin.cs index 60278d1..08303e8 100644 --- a/Teleportation/TeleportationPlugin.cs +++ b/Teleportation/TeleportationPlugin.cs @@ -1,6 +1,7 @@ using RestoreMonarchy.Teleportation.Components; using RestoreMonarchy.Teleportation.Models; using RestoreMonarchy.Teleportation.Utils; +using Rocket.API; using Rocket.API.Collections; using Rocket.Core.Plugins; using Rocket.Unturned; @@ -32,6 +33,7 @@ protected override void Load() { Instance = this; MessageColor = UnturnedChat.GetColorFromName(Configuration.Instance.MessageColor, Color.green); + TPRequests = new List(); CombatPlayers = new Dictionary(); RaidPlayers = new Dictionary(); @@ -46,6 +48,7 @@ protected override void Load() StructureManager.onDamageStructureRequested += OnStructureDamaged; Logger.Log($"{Name} {Assembly.GetName().Version} has been loaded!", ConsoleColor.Yellow); + Logger.Log("Check out more Unturned plugins at restoremonarchy.com"); } protected override void Unload() @@ -139,37 +142,89 @@ private void OnPlayerDeath(UnturnedPlayer player, EDeathCause cause, ELimb limb, this.StopPlayerCombat(player.CSteamID); } + internal void SendMessageToPlayer(CSteamID steamID, string translationKey, params object[] placeholder) + { + UnturnedPlayer player = UnturnedPlayer.FromCSteamID(steamID); + if (player.Player == null) + { + return; + } + + SendMessageToPlayer(player, translationKey, placeholder); + } + + internal void SendMessageToPlayer(IRocketPlayer player, string translationKey, params object[] placeholder) + { + if (player == null) + { + return; + } + + string msg = Translate(translationKey, placeholder); + msg = msg.Replace("[[", "<").Replace("]]", ">"); + if (player is ConsolePlayer) + { + Logger.Log(msg); + return; + } + + UnturnedPlayer unturnedPlayer = (UnturnedPlayer)player; + if (unturnedPlayer != null) + { + ChatManager.serverSendMessage(msg, MessageColor, null, unturnedPlayer.SteamPlayer(), EChatMode.SAY, Configuration.Instance.MessageIconUrl, true); + } + } + public override TranslationList DefaultTranslations => new TranslationList() { - { "TargetNotFound", "Failed to find a target" }, - { "CombatStart", "Combat mode started" }, - { "CombatExpire", "Combat mode expired" }, - { "RaidStart", "Raid mode started" }, - { "RaidExpire", "Raid mode expired" }, - { "TPAHelp", "Use: /tpa " }, - { "TPACooldown", "You have to wait {0} before you can send request again" }, - { "TPADuplicate", "You already sent a teleportation request to that player" }, - { "TPASent", "Successfully sent TPA request to {0}" }, - { "TPAReceive", "You received TPA request from {0}" }, - { "TPANoRequest", "There is no TPA requests to you" }, - { "TPAAccepted", "Successfully accepted TPA request from {0}" }, - { "TPADelay", "You will be teleported to {0} in {1} seconds" }, - { "TPAWhileCombat", "Teleportation canceled because {0} is in combat mode" }, - { "TPAWhileCombatYou", "Teleportation canceled because you are in combat mode" }, - { "TPAWhileRaid", "Teleportation canceled because {0} is in raid mode" }, - { "TPAWhileRaidYou", "Teleportation canceled because you are in raid mode" }, - { "TPADead", "Teleportation canceled because you or {0} is dead" }, - { "TPACave", "Teleportation canceled because {0} is in cave" }, - { "TPACaveYou", "Teleportation canceled because you are in cave" }, - { "TPANoSentRequest", "You did not send any TPA request" }, - { "TPACanceled", "Successfully canceled TPA request to {0}" }, - { "TPADenied", "Successfully denied TPA request from {0}" }, - { "TPASuccess", "You have been teleported to {0}" }, - { "TPAYourself", "You cannot send TPA request to yourself" }, - { "TPAVehicle", "Teleportation canceled because {0} is in vehicle" }, - { "TPAVehicleYou", "Teleportation canceled because you are in vehicle" }, - { "TPACanceledSenderMoved", "Teleportation canceled because {0} moved!" }, - { "TPACanceledYouMoved", "Teleportation canceled because you moved!" }, + // Basic notifications + { "TargetNotFound", "Target not found" }, + { "CombatStart", "Combat mode activated" }, + { "CombatExpire", "Combat mode ended" }, + { "RaidStart", "Raid mode activated" }, + { "RaidExpire", "Raid mode ended" }, + + // TPA Command help + { "TPAHelp", "[[b]]TPA Commands:[[/b]]\n/tpa [[player]] - Send request\n/tpa accept - Accept request\n/tpa deny - Deny request\n/tpa cancel - Cancel your request" }, + + // TPA Request messages + { "TPACooldown", "Please wait [[b]]{0}[[/b]] seconds before sending another request" }, + { "TPADuplicate", "You already have a pending request to this player" }, + { "TPASent", "TPA request sent to [[b]]{0}[[/b]]" }, + { "TPAReceive", "[[b]]{0}[[/b]] wants to teleport to you\nType [[b]]/tpa accept[[/b]] to allow" }, + + // TPA Status messages + { "TPANoRequest", "No pending TPA requests" }, + { "TPAAccepted", "Accepted [[b]]{0}'s[[/b]] TPA request" }, + { "TPADelay", "Teleporting to [[b]]{0}[[/b]] in [[b]]{1}[[/b]] seconds..." }, + + // Combat/Raid related + { "TPAWhileCombat", "Teleport failed - [[b]]{0}[[/b]] is in combat" }, + { "TPAWhileCombatYou", "Teleport failed - You are in combat" }, + { "TPAWhileRaid", "Teleport failed - [[b]]{0}[[/b]] is in raid mode" }, + { "TPAWhileRaidYou", "Teleport failed - You are in raid mode" }, + + // Other restrictions + { "TPADead", "Teleport failed - Player death detected" }, + { "TPACave", "Teleport failed - [[b]]{0}[[/b]] is in a cave" }, + { "TPACaveYou", "Teleport failed - You are in a cave" }, + { "TPAVehicle", "Teleport failed - [[b]]{0}[[/b]] is in a vehicle" }, + { "TPAVehicleYou", "Teleport failed - You are in a vehicle" }, + + // Request management + { "TPANoSentRequest", "You have no pending outgoing requests" }, + { "TPACanceled", "TPA request to [[b]]{0}[[/b]] canceled" }, + { "TPADenied", "Denied TPA request from [[b]]{0}[[/b]]" }, + + // Movement related + { "TPACanceledSenderMoved", "Teleport canceled - [[b]]{0}[[/b]] moved" }, + { "TPACanceledYouMoved", "Teleport canceled - You moved" }, + + // Success message + { "TPASuccess", "Successfully teleported to [[b]]{0}[[/b]]" }, + + // Invalid requests + { "TPAYourself", "You cannot send a TPA request to yourself" } }; } } diff --git a/Teleportation/Utils/TeleportationPluginExtensions.cs b/Teleportation/Utils/TeleportationPluginExtensions.cs index 3077a7a..cd1954a 100644 --- a/Teleportation/Utils/TeleportationPluginExtensions.cs +++ b/Teleportation/Utils/TeleportationPluginExtensions.cs @@ -10,25 +10,26 @@ namespace RestoreMonarchy.Teleportation.Utils { public static class TeleportationPluginExtensions { - public static void StartPlayerCombat(this TeleportationPlugin plugin, CSteamID steamID) + public static void StartPlayerCombat(this TeleportationPlugin pluginInstance, CSteamID steamID) { - if (plugin.CombatPlayers.TryGetValue(steamID, out Timer timer)) + if (pluginInstance.CombatPlayers.TryGetValue(steamID, out Timer timer)) { timer.Enabled = false; timer.Start(); } else { - timer = new Timer(plugin.Configuration.Instance.CombatDuration * 1000); - plugin.CombatPlayers.Add(steamID, timer); + timer = new Timer(pluginInstance.Configuration.Instance.CombatDuration * 1000); + pluginInstance.CombatPlayers.Add(steamID, timer); timer.AutoReset = false; timer.Elapsed += (sender, e) => { - TaskDispatcher.QueueOnMainThread(() => plugin.StopPlayerCombat(steamID)); + TaskDispatcher.QueueOnMainThread(() => pluginInstance.StopPlayerCombat(steamID)); }; timer.Start(); - UnturnedChat.Say(steamID, plugin.Translate("CombatStart"), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(steamID, "CombatStart"); + UnturnedChat.Say(steamID, pluginInstance.Translate("CombatStart"), pluginInstance.MessageColor); } } @@ -38,41 +39,43 @@ public static void StopPlayerCombat(this TeleportationPlugin plugin, CSteamID st { timer.Dispose(); plugin.CombatPlayers.Remove(steamID); - UnturnedChat.Say(steamID, plugin.Translate("CombatExpire"), plugin.MessageColor); + plugin.SendMessageToPlayer(steamID, "CombatExpire"); } } - public static void StartPlayerRaid(this TeleportationPlugin plugin, CSteamID steamID) + public static void StartPlayerRaid(this TeleportationPlugin pluginInstance, CSteamID steamID) { - if (plugin.RaidPlayers.TryGetValue(steamID, out Timer timer)) + if (pluginInstance.RaidPlayers.TryGetValue(steamID, out Timer timer)) { if (timer.Enabled) + { timer.Enabled = false; + } timer.Start(); } else { - timer = new Timer(plugin.Configuration.Instance.RaidDuration * 1000); - plugin.RaidPlayers.Add(steamID, timer); + timer = new Timer(pluginInstance.Configuration.Instance.RaidDuration * 1000); + pluginInstance.RaidPlayers.Add(steamID, timer); timer.AutoReset = false; timer.Elapsed += (sender, e) => { - TaskDispatcher.QueueOnMainThread(() => plugin.StopPlayerRaid(steamID)); + TaskDispatcher.QueueOnMainThread(() => pluginInstance.StopPlayerRaid(steamID)); }; timer.Start(); - UnturnedChat.Say(steamID, plugin.Translate("RaidStart"), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(steamID, "RaidStart"); } } - public static void StopPlayerRaid(this TeleportationPlugin plugin, CSteamID steamID) + public static void StopPlayerRaid(this TeleportationPlugin pluginInstance, CSteamID steamID) { - if (plugin.RaidPlayers.TryGetValue(steamID, out Timer timer)) + if (pluginInstance.RaidPlayers.TryGetValue(steamID, out Timer timer)) { timer.Dispose(); - plugin.RaidPlayers.Remove(steamID); - UnturnedChat.Say(steamID, plugin.Translate("RaidExpire"), plugin.MessageColor); + pluginInstance.RaidPlayers.Remove(steamID); + pluginInstance.SendMessageToPlayer(steamID, "RaidExpire"); } } diff --git a/Teleportation/Utils/TeleportationRequestHelper.cs b/Teleportation/Utils/TeleportationRequestHelper.cs index d1addd0..f8c420e 100644 --- a/Teleportation/Utils/TeleportationRequestHelper.cs +++ b/Teleportation/Utils/TeleportationRequestHelper.cs @@ -9,83 +9,85 @@ namespace RestoreMonarchy.Teleportation.Utils { public static class TeleportationRequestHelper { - public static void SendTPARequest(this TeleportationPlugin plugin, UnturnedPlayer sender, UnturnedPlayer target) + public static void SendTPARequest(this TeleportationPlugin pluginInstance, UnturnedPlayer sender, UnturnedPlayer target) { if (sender.Id == target.Id) { - UnturnedChat.Say(sender, plugin.Translate("TPAYourself"), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(sender, "TPAYourself"); return; } - if (plugin.Cooldowns.TryGetValue(sender.CSteamID, out DateTime lastUse)) + if (pluginInstance.Cooldowns.TryGetValue(sender.CSteamID, out DateTime lastUse)) { double secondsElapsed = (DateTime.Now - lastUse).TotalSeconds; - double timeLeft = Math.Round(plugin.Configuration.Instance.TPACooldown - secondsElapsed); - if (secondsElapsed < plugin.Configuration.Instance.TPACooldown) + double timeLeft = Math.Round(pluginInstance.Configuration.Instance.TPACooldown - secondsElapsed); + if (secondsElapsed < pluginInstance.Configuration.Instance.TPACooldown) { - UnturnedChat.Say(sender, plugin.Translate("TPACooldown", timeLeft), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(sender, "TPACooldown", timeLeft.ToString("N0")); return; } } - if (plugin.TPRequests.Exists(x => x.Sender == sender.CSteamID && x.Target == target.CSteamID)) + if (pluginInstance.TPRequests.Exists(x => x.Sender == sender.CSteamID && x.Target == target.CSteamID)) { - UnturnedChat.Say(sender, plugin.Translate("TPADuplicate"), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(sender, "TPADuplicate"); return; } var request = new TPARequest(sender.CSteamID, target.CSteamID); if (!request.Validate()) + { return; + } - plugin.TPRequests.Add(request); - plugin.Cooldowns[sender.CSteamID] = DateTime.Now; + pluginInstance.TPRequests.Add(request); + pluginInstance.Cooldowns[sender.CSteamID] = DateTime.Now; - UnturnedChat.Say(sender, plugin.Translate("TPASent", target.DisplayName), plugin.MessageColor); - UnturnedChat.Say(target, plugin.Translate("TPAReceive", sender.DisplayName), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(sender, "TPASent", target.DisplayName); + pluginInstance.SendMessageToPlayer(target, "TPAReceive", sender.DisplayName); } - public static void AcceptTPARequest(this TeleportationPlugin plugin, UnturnedPlayer caller) + public static void AcceptTPARequest(this TeleportationPlugin pluginInstance, UnturnedPlayer caller) { // Remove all expired TP requests - plugin.TPRequests.RemoveAll(x => x.IsExpired); + pluginInstance.TPRequests.RemoveAll(x => x.IsExpired); - var request = plugin.TPRequests.FirstOrDefault(x => x.Target == caller.CSteamID); + var request = pluginInstance.TPRequests.FirstOrDefault(x => x.Target == caller.CSteamID); if (request == null) { - UnturnedChat.Say(caller, plugin.Translate("TPANoRequest"), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(caller, "TPANoRequest"); return; } - UnturnedChat.Say(caller, plugin.Translate("TPAAccepted", request.SenderPlayer.CharacterName), plugin.MessageColor); - request.Execute(plugin.Configuration.Instance.TPADelay); - plugin.TPRequests.Remove(request); + pluginInstance.SendMessageToPlayer(caller, "TPAAccepted", request.SenderPlayer.CharacterName); + request.Execute(pluginInstance.Configuration.Instance.TPADelay); + pluginInstance.TPRequests.Remove(request); } - public static void CancelTPARequest(this TeleportationPlugin plugin, UnturnedPlayer caller) + public static void CancelTPARequest(this TeleportationPlugin pluginInstance, UnturnedPlayer caller) { - var request = plugin.TPRequests.FirstOrDefault(x => x.Sender == caller.CSteamID); + var request = pluginInstance.TPRequests.FirstOrDefault(x => x.Sender == caller.CSteamID); if (request != null) { - UnturnedChat.Say(caller, plugin.Translate("TPACanceled", request.TargetPlayer.DisplayName), plugin.MessageColor); - plugin.TPRequests.Remove(request); + pluginInstance.SendMessageToPlayer(caller, "TPACanceled", request.TargetPlayer.DisplayName); + pluginInstance.TPRequests.Remove(request); } else { - UnturnedChat.Say(caller, plugin.Translate("TPANoSentRequest"), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(caller, "TPANoSentRequest"); } } - public static void DenyTPARequest(this TeleportationPlugin plugin, UnturnedPlayer caller) + public static void DenyTPARequest(this TeleportationPlugin pluginInstance, UnturnedPlayer caller) { - var request = plugin.TPRequests.FirstOrDefault(x => x.Target == caller.CSteamID); + var request = pluginInstance.TPRequests.FirstOrDefault(x => x.Target == caller.CSteamID); if (request != null) { - UnturnedChat.Say(caller, plugin.Translate("TPADenied", request.SenderPlayer.DisplayName), plugin.MessageColor); - plugin.TPRequests.Remove(request); + pluginInstance.SendMessageToPlayer(caller, "TPADenied", request.SenderPlayer.DisplayName); + pluginInstance.TPRequests.Remove(request); } else { - UnturnedChat.Say(caller, plugin.Translate("TPANoRequest"), plugin.MessageColor); + pluginInstance.SendMessageToPlayer(caller, "TPANoRequest"); } }