Make /possess 24.535% less copy-paste.

This commit is contained in:
UnknownShadow200 2016-03-26 12:19:25 +11:00
parent 5babc4332f
commit ace8cd5b71
5 changed files with 60 additions and 128 deletions

View File

@ -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);
}

View File

@ -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 <player> [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)\".");

View File

@ -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)

View File

@ -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;

View File

@ -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)