From 87e0fbadd8e26a650e65683d14308c5ba8b23be0 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Thu, 2 Mar 2017 07:57:05 +1100 Subject: [PATCH] Don't allow yourself to be patrolled, partially addresses #363 --- MCGalaxy/Commands/Moderation/CmdPatrol.cs | 34 +++++++++++++---------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/MCGalaxy/Commands/Moderation/CmdPatrol.cs b/MCGalaxy/Commands/Moderation/CmdPatrol.cs index 264114265..eeefc363a 100644 --- a/MCGalaxy/Commands/Moderation/CmdPatrol.cs +++ b/MCGalaxy/Commands/Moderation/CmdPatrol.cs @@ -35,32 +35,36 @@ namespace MCGalaxy.Commands { if (Player.IsSuper(p)) { MessageInGameOnly(p); return; } if (message != "") { Help(p); return; } - List getpatrol = FindToPatrol(); - if (getpatrol.Count <= 0) { - Player.Message(p, "There must be at least one guest online to use this command!"); return; + List candidates = GetPatrolCandidates(p); + if (candidates.Count == 0) { + LevelPermission perm = (LevelPermission)CommandOtherPerms.GetPerm(this); + Player.Message(p, "No {0}players ranked {1} %Sor below are online.", + p.Rank <= perm ? "other " : "", // in case we can patrol ourselves + Group.GetColoredName(perm)); + } else { + Player target = candidates[new Random().Next(candidates.Count)]; + Command.all.Find("tp").Use(p, target.name); + Player.Message(p, "Now visiting " + target.ColoredName + "%S."); } - - string value = getpatrol[new Random().Next(getpatrol.Count)]; - Player who = PlayerInfo.FindExact(value); - Command.all.Find("tp").Use(p, who.name); - Player.Message(p, "Now visiting " + who.ColoredName + "%S."); } - List FindToPatrol() { - List players = new List(); - int perm = CommandOtherPerms.GetPerm(this); + List GetPatrolCandidates(Player p) { + List candidates = new List(); + LevelPermission perm = (LevelPermission)CommandOtherPerms.GetPerm(this); Player[] online = PlayerInfo.Online.Items; - foreach (Player p in online) { - if ((int)p.Rank <= perm) players.Add(p.name); + foreach (Player target in online) { + if (target.Rank > perm || target == p || !Entities.CanSee(p, target)) continue; + candidates.Add(target); } - return players; + return candidates; } public override void Help(Player p) { Player.Message(p, "%T/patrol"); LevelPermission perm = (LevelPermission)CommandOtherPerms.GetPerm(this); - Player.Message(p, "%HTeleports you to a random {0} %Sor lower", Group.GetColoredName(perm)); + Player.Message(p, "%HTeleports you to a random {0} %Sor lower", + Group.GetColoredName(perm)); } } }