public override void Use(Player p, string message) { if (message == "") { Help(p); return; } try { Level foundLevel = Level.Find(message); if (foundLevel != null) { Level startLevel = p.level; GC.Collect(); if (p.level == foundLevel) { Player.SendMessage(p, "You are already in \"" + foundLevel.name + "\"."); return; } if (!p.ignorePermission) if (p.group.Permission < foundLevel.permissionvisit) { Player.SendMessage(p, "You're not allowed to go to " + foundLevel.name + "."); return; } p.Loading = true; foreach (Player pl in Player.players) if (p.level == pl.level && p != pl) p.SendDie(pl.id); foreach (PlayerBot b in PlayerBot.playerbots) if (p.level == b.level) p.SendDie(b.id); Player.GlobalDie(p, true); p.level = foundLevel; p.SendUserMOTD(); p.SendMap(); GC.Collect(); ushort x = (ushort)((0.5 + foundLevel.spawnx) * 32); ushort y = (ushort)((1 + foundLevel.spawny) * 32); ushort z = (ushort)((0.5 + foundLevel.spawnz) * 32); if (!p.hidden) Player.GlobalSpawn(p, x, y, z, foundLevel.rotx, foundLevel.roty, true); else unchecked { p.SendPos((byte)-1, x, y, z, foundLevel.rotx, foundLevel.roty); } foreach (Player pl in Player.players) if (pl.level == p.level && p != pl && !pl.hidden) p.SendSpawn(pl.id, pl.color + pl.name, pl.pos[0], pl.pos[1], pl.pos[2], pl.rot[0], pl.rot[1]); foreach (PlayerBot b in PlayerBot.playerbots) if (b.level == p.level) p.SendSpawn(b.id, b.color + b.name, b.pos[0], b.pos[1], b.pos[2], b.rot[0], b.rot[1]); if (!p.hidden) Player.GlobalChat(p, p.color + "*" + p.name + Server.DefaultColor + " went to &b" + foundLevel.name, false); p.Loading = false; bool skipUnload = false; if (startLevel.unload && !startLevel.name.Contains("&cMuseum ")) { foreach (Player pl in Player.players) if (pl.level == startLevel) skipUnload = true; if (!skipUnload && Server.AutoLoad) startLevel.Unload(); } } else if (Server.AutoLoad) { Command.all.Find("load").Use(p, message); foundLevel = Level.Find(message); if (foundLevel != null) Use(p, message); } else Player.SendMessage(p, "There is no level \"" + message + "\" loaded."); GC.Collect(); GC.WaitForPendingFinalizers(); } catch (Exception e) { Server.ErrorLog(e); } }
public override void Use(Player p, string message) { if (!p.canBuild) { Player.SendMessage(p, "You're currently being &4possessed" + Server.DefaultColor + "!"); return; } try { bool stealth = false; if (message != "") { if (message == "#") { if (p.following != "") { stealth = true; message = ""; } else { Help(p); return; } } else if (message.IndexOf(' ') != -1) { if (message.Split(' ')[0] == "#") { if (p.hidden) stealth = true; message = message.Split(' ')[1]; } } } Player who = Player.Find(message); if (message == "" && p.following == "") { Help(p); return; } else if (message == "" && p.following != "" || message == p.following) { who = Player.Find(p.following); p.following = ""; if (p.hidden) { if (who != null) p.SendSpawn(who.id, who.color + who.name, who.pos[0], who.pos[1], who.pos[2], who.rot[0], who.rot[1]); if (!stealth) { Command.all.Find("hide").Use(p, ""); } else { if (who != null) { Player.SendMessage(p, "You have stopped following " + who.color + who.name + Server.DefaultColor + " and remained hidden."); } else { Player.SendMessage(p, "Following stopped."); } } return; } } if (who == null) { Player.SendMessage(p, "Could not find player."); return; } else if (who == p) { Player.SendMessage(p, "Cannot follow yourself."); return; } else if (who.group.Permission >= p.group.Permission) { Player.SendMessage(p, "Cannot follow someone of equal or greater rank."); return; } else if (who.following != "") { Player.SendMessage(p, who.name + " is already following " + who.following); return; } if (!p.hidden) Command.all.Find("hide").Use(p, ""); if (p.level != who.level) Command.all.Find("tp").Use(p, who.name); if (p.following != "") { who = Player.Find(p.following); p.SendSpawn(who.id, who.color + who.name, who.pos[0], who.pos[1], who.pos[2], who.rot[0], who.rot[1]); } who = Player.Find(message); p.following = who.name; Player.SendMessage(p, "Following " + who.name + ". Use \"/follow\" to stop."); p.SendDie(who.id); } catch (Exception e) { Server.ErrorLog(e); Player.SendMessage(p, "Error occured"); } }