From ace8cd5b712c254ccb3cfea99078f01ccef74385 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sat, 26 Mar 2016 12:19:25 +1100 Subject: [PATCH] Make /possess 24.535% less copy-paste. --- Commands/Moderation/CmdFollow.cs | 2 +- Commands/Moderation/CmdPossess.cs | 147 +++++++++--------------------- Commands/World/CmdGoto.cs | 6 +- Player/Player.cs | 31 +++---- Server/Server.Threads.cs | 2 +- 5 files changed, 60 insertions(+), 128 deletions(-) diff --git a/Commands/Moderation/CmdFollow.cs b/Commands/Moderation/CmdFollow.cs index d0d494ad7..8c18ddcde 100644 --- a/Commands/Moderation/CmdFollow.cs +++ b/Commands/Moderation/CmdFollow.cs @@ -108,7 +108,7 @@ namespace MCGalaxy.Commands } who = PlayerInfo.Find(message); p.following = who.name; - Player.SendMessage(p, "Following " + who.color + who.DisplayName + Server.DefaultColor + ". Use \"/follow\" to stop."); + Player.SendMessage(p, "Following " + who.color + who.DisplayName + "%S. Use \"/follow\" to stop."); p.SendDespawn(who.id); } diff --git a/Commands/Moderation/CmdPossess.cs b/Commands/Moderation/CmdPossess.cs index 613a553a8..c1dac0d9c 100644 --- a/Commands/Moderation/CmdPossess.cs +++ b/Commands/Moderation/CmdPossess.cs @@ -17,10 +17,9 @@ */ using System; -namespace MCGalaxy.Commands -{ - public sealed class CmdPossess : Command - { +namespace MCGalaxy.Commands { + + public sealed class CmdPossess : Command { public override string name { get { return "possess"; } } public override string shortcut { get { return ""; } } public override string type { get { return CommandTypes.Moderation; } } @@ -28,129 +27,69 @@ namespace MCGalaxy.Commands public override LevelPermission defaultRank { get { return LevelPermission.Admin; } } public CmdPossess() { } - public override void Use(Player p, string message) - { - if (message.Split(' ').Length > 2) { Help(p); return; } - if (p == null) { Player.SendMessage(p, "Console possession? Nope.avi."); return; } + public override void Use(Player p, string message) { + if (p == null) { MessageInGameOnly(p); return; } + string[] args = message.Split(' '); + if (args.Length > 2) { Help(p); return; } - string skin = (message.Split(' ').Length == 2) ? message.Split(' ')[1] : ""; - message = message.Split(' ')[0]; - if (message == "") - { - if (p.possess == "") - { - Help(p); - return; - } - else - { - Player who = PlayerInfo.Find(p.possess); - if (who == null) - { - p.possess = ""; - Player.SendMessage(p, "Possession disabled."); - return; - } - who.following = ""; - who.canBuild = true; - p.possess = ""; - if (!who.MarkPossessed()) - { - return; - } - p.invincible = false; - Command.all.Find("hide").Use(p, ""); - Player.SendMessage(p, "Stopped possessing " + who.color + who.name + Server.DefaultColor + "."); - return; - } - } - else if (message == p.possess) - { + string skin = (args.Length == 2) ? args[1] : ""; + message = args[0]; + if (message == "" || message == p.possess) { + if (message == "" && p.possess == "") { Help(p); return; } + Player who = PlayerInfo.Find(p.possess); - if (who == null) - { + if (who == null) { p.possess = ""; - Player.SendMessage(p, "Possession disabled."); - return; + Player.SendMessage(p, "Possession disabled."); return; } - if (who == p) - { - Player.SendMessage(p, "Cannot possess yourself!"); - return; + if (who == p) { + Player.SendMessage(p, "Cannot possess yourself!"); return; } who.following = ""; who.canBuild = true; p.possess = ""; - if (!who.MarkPossessed()) - { - return; - } + if (!who.MarkPossessed()) return; + p.invincible = false; Command.all.Find("hide").Use(p, ""); - Player.SendMessage(p, "Stopped possessing " + who.color + who.name + Server.DefaultColor + "."); - return; - } - else - { - Player who = PlayerInfo.Find(message); - if (who == null) - { - Player.SendMessage(p, "Could not find player."); - return; + Player.SendMessage(p, "Stopped possessing " + who.color + who.name + "%S."); + } else { + Player who = PlayerInfo.FindOrShowMatches(p, message); + if (who == null) return; + if (who.group.Permission >= p.group.Permission) { + Player.SendMessage(p, "Cannot possess someone of equal or greater rank."); return; } - if (who.group.Permission >= p.group.Permission) - { - Player.SendMessage(p, "Cannot possess someone of equal or greater rank."); - return; + + if (who.possess != "") { + Player.SendMessage(p, "That player is currently possessing someone!"); return; } - if (who.possess != "") - { - Player.SendMessage(p, "That player is currently possessing someone!"); - return; - } - if (who.following != "") - { - Player.SendMessage(p, "That player is either following someone or already possessed."); - return; - } - if (p.possess != "") - { - Player oldwho = PlayerInfo.Find(p.possess); - if (oldwho != null) - { - oldwho.following = ""; - oldwho.canBuild = true; - if (!oldwho.MarkPossessed()) - { - return; - } - //p.SendSpawn(oldwho.id, oldwho.color + oldwho.name, oldwho.pos[0], oldwho.pos[1], oldwho.pos[2], oldwho.rot[0], oldwho.rot[1]); + if (who.following != "") { + Player.SendMessage(p, "That player is either following someone or already possessed."); return; + } + if (p.possess != "") { + Player prev = PlayerInfo.Find(p.possess); + if (prev != null) { + prev.following = ""; + prev.canBuild = true; + if (!prev.MarkPossessed()) return; } } + Command.all.Find("tp").Use(p, who.name); - if (!p.hidden) - { - Command.all.Find("hide").Use(p, ""); - } + if (!p.hidden) Command.all.Find("hide").Use(p, ""); p.possess = who.name; who.following = p.name; - if (!p.invincible) - { - p.invincible = true; - } + if (!p.invincible) p.invincible = true; + bool result = (skin == "#") ? who.MarkPossessed() : who.MarkPossessed(p.name); - if (!result) - { - return; - } + if (!result) return; p.SendDespawn(who.id); who.canBuild = false; - Player.SendMessage(p, "Successfully possessed " + who.color + who.name + Server.DefaultColor + "."); + Player.SendMessage(p, "Successfully possessed " + who.color + who.name + "%S."); } } - public override void Help(Player p) - { + public override void Help(Player p) { Player.SendMessage(p, "/possess [skin as #] - DEMONIC POSSESSION HUE HUE"); Player.SendMessage(p, "Using # after player name makes possessed keep their custom skin during possession."); Player.SendMessage(p, "Not using it makes them lose their skin, and makes their name show as \"Player (YourName)\"."); diff --git a/Commands/World/CmdGoto.cs b/Commands/World/CmdGoto.cs index 940d7e268..19f1ec129 100644 --- a/Commands/World/CmdGoto.cs +++ b/Commands/World/CmdGoto.cs @@ -143,10 +143,8 @@ namespace MCGalaxy.Commands { foreach (Player pl in players) { if (pl.level != p.level || pl.hidden || p == pl) continue; Player.SpawnEntity(pl, p, pl.id, pl.pos[0], pl.pos[1], pl.pos[2], pl.rot[0], pl.rot[1], ""); - } - - if (!p.hidden) Player.GlobalSpawn(p, x, y, z, rotX, rotY, true, ""); - else p.SendPos(0xFF, x, y, z, rotX, rotY); + } + Player.GlobalSpawn(p, x, y, z, rotX, rotY, true); PlayerBot[] bots = PlayerBot.Bots.Items; foreach (PlayerBot b in bots) diff --git a/Player/Player.cs b/Player/Player.cs index c7382f27f..7347642da 100644 --- a/Player/Player.cs +++ b/Player/Player.cs @@ -489,8 +489,8 @@ namespace MCGalaxy { Player[] players = PlayerInfo.Online.Items; p.lastSpawnColor = p.infected ? ZombieGame.InfectCol : p.color; foreach (Player other in players) { - if (other.Loading && p != other) continue; - if (p.level != other.level || (p.hidden && !self)) continue; + if ((other.Loading && p != other) || p.level != other.level) continue; + if ((p.hidden || p.referee) && !self) continue; if (p != other) { SpawnEntity(p, other, p.id, x, y, z, rotx, roty, possession); @@ -504,20 +504,16 @@ namespace MCGalaxy { internal static void SpawnEntity(Player p, Player dst, byte id, ushort x, ushort y, ushort z, byte rotx, byte roty, string possession = "") { - if (!Server.ZombieModeOn) { + if (!Server.ZombieModeOn || !p.infected) { dst.SendSpawn(id, p.color + p.name + possession, x, y, z, rotx, roty); return; } - if (p.infected) { - if (Server.zombie.ZombieName != "" && !dst.aka) - dst.SendSpawn(id, Colors.red + Server.zombie.ZombieName + possession, x, y, z, rotx, roty); - else - dst.SendSpawn(id, Colors.red + p.name + possession, x, y, z, rotx, roty); - if (dst.HasCpeExt(CpeExt.ChangeModel)) - dst.SendChangeModel(id, "zombie"); - } else if (!p.referee) { - dst.SendSpawn(id, p.color + p.name + possession, x, y, z, rotx, roty); - } + if (Server.zombie.ZombieName != "" && !dst.aka) + dst.SendSpawn(id, Colors.red + Server.zombie.ZombieName + possession, x, y, z, rotx, roty); + else + dst.SendSpawn(id, Colors.red + p.name + possession, x, y, z, rotx, roty); + if (dst.HasCpeExt(CpeExt.ChangeModel)) + dst.SendChangeModel(id, "zombie"); } public static void GlobalDespawn(Player p, bool self) { @@ -530,13 +526,12 @@ namespace MCGalaxy { } public bool MarkPossessed(string marker = "") { - if ( marker != "" ) { - Player controller = PlayerInfo.Find(marker); - if ( controller == null ) { - return false; - } + if (marker != "") { + Player controller = PlayerInfo.FindExact(marker); + if (controller == null) return false; marker = " (" + controller.color + controller.name + color + ")"; } + GlobalDespawn(this, true); GlobalSpawn(this, pos[0], pos[1], pos[2], rot[0], rot[1], true, marker); return true; diff --git a/Server/Server.Threads.cs b/Server/Server.Threads.cs index 03e96c1dc..76e532073 100644 --- a/Server/Server.Threads.cs +++ b/Server/Server.Threads.cs @@ -48,7 +48,7 @@ namespace MCGalaxy { if (p.frozen) { p.SendPos(0xFF, p.pos[0], p.pos[1], p.pos[2], p.rot[0], p.rot[1]); continue; } else if (p.following != "") { - Player who = PlayerInfo.Find(p.following); + Player who = PlayerInfo.FindExact(p.following); if (who == null || who.level != p.level) { p.following = ""; if (!p.canBuild)