mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-27 07:11:04 -04:00
Make /possess 24.535% less copy-paste.
This commit is contained in:
parent
5babc4332f
commit
ace8cd5b71
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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 = (args.Length == 2) ? args[1] : "";
|
||||
message = args[0];
|
||||
if (message == "" || message == p.possess) {
|
||||
if (message == "" && p.possess == "") { 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)
|
||||
{
|
||||
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 (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 (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)\".");
|
||||
|
@ -144,9 +144,7 @@ namespace MCGalaxy.Commands {
|
||||
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)
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user