public override void Use(Player p, string message) { p.staticCommands = !p.staticCommands; p.ClearBlockchange(); p.BlockAction = 0; Player.SendMessage(p, "Static mode: &a" + p.staticCommands.ToString()); try { if (message != "") { if (message.IndexOf(' ') == -1) { if (p.group.CanExecute(Command.all.Find(message))) Command.all.Find(message).Use(p, ""); else Player.SendMessage(p, "Cannot use that command."); } else { if (p.group.CanExecute(Command.all.Find(message.Split(' ')[0]))) Command.all.Find(message.Split(' ')[0]).Use(p, message.Substring(message.IndexOf(' ') + 1)); else Player.SendMessage(p, "Cannot use that command."); } } } catch { Player.SendMessage(p, "Could not find specified command"); } }
public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type) { p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); CatchPos cpos = (CatchPos)p.blockchangeObject; unchecked { if (cpos.type != (byte)-1) { type = cpos.type; } } List<Pos> buffer = new List<Pos>(); for (ushort xx = Math.Min(cpos.x, x); xx <= Math.Max(cpos.x, x); ++xx) { for (ushort yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy) { for (ushort zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz) { if (p.level.GetTile(xx, yy, zz) == type) { BufferAdd(buffer, xx, yy, zz); } } } } if (buffer.Count > p.group.maxBlocks) { Player.SendMessage(p, "You tried to replace " + buffer.Count + " blocks."); Player.SendMessage(p, "You cannot replace more than " + p.group.maxBlocks + "."); return; } Player.SendMessage(p, buffer.Count.ToString() + " blocks."); buffer.ForEach(delegate(Pos pos) { p.level.Blockchange(p, pos.x, pos.y, pos.z, cpos.type2); //update block for everyone }); if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public void EntryChange(Player p, ushort x, ushort y, ushort z, byte type) { p.ClearBlockchange(); portalPos bp = (portalPos)p.blockchangeObject; if (bp.Multi && type == Block.red && bp.port.Count > 0) { ExitChange(p, x, y, z, type); return; } byte b = p.level.GetTile(x, y, z); p.level.Blockchange(p, x, y, z, bp.type); p.SendBlockchange(x, y, z, Block.green); portPos Port; Port.portMapName = p.level.name; Port.x = x; Port.y = y; Port.z = z; bp.port.Add(Port); p.blockchangeObject = bp; if (!bp.Multi) { p.Blockchange += new Player.BlockchangeEventHandler(ExitChange); Player.SendMessage(p, "&aEntry block placed"); } else { p.Blockchange += new Player.BlockchangeEventHandler(EntryChange); Player.SendMessage(p, "&aEntry block placed. &cRed block for exit"); } }
public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type) { p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); CatchPos cpos = (CatchPos)p.blockchangeObject; Level.Zone Zn; Zn.smallX = Math.Min(cpos.x, x); Zn.smallY = Math.Min(cpos.y, y); Zn.smallZ = Math.Min(cpos.z, z); Zn.bigX = Math.Max(cpos.x, x); Zn.bigY = Math.Max(cpos.y, y); Zn.bigZ = Math.Max(cpos.z, z); Zn.Owner = cpos.Owner; p.level.ZoneList.Add(Zn); //DB MySQL.executeQuery("INSERT INTO `Zone" + p.level.name + "` (SmallX, SmallY, SmallZ, BigX, BigY, BigZ, Owner) VALUES (" + Zn.smallX + ", " + Zn.smallY + ", " + Zn.smallZ + ", " + Zn.bigX + ", " + Zn.bigY + ", " + Zn.bigZ + ", '" + Zn.Owner + "')"); //DB Player.SendMessage(p, "Added zone for &b" + cpos.Owner); }
public void ExitChange(Player p, ushort x, ushort y, ushort z, byte type) { p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); portalPos bp = (portalPos)p.blockchangeObject; foreach (portPos pos in bp.port) { DataTable Portals = MySQL.fillData("SELECT * FROM `Portals" + pos.portMapName + "` WHERE EntryX=" + (int)pos.x + " AND EntryY=" + (int)pos.y + " AND EntryZ=" + (int)pos.z); Portals.Dispose(); if (Portals.Rows.Count == 0) { MySQL.executeQuery("INSERT INTO `Portals" + pos.portMapName + "` (EntryX, EntryY, EntryZ, ExitMap, ExitX, ExitY, ExitZ) VALUES (" + (int)pos.x + ", " + (int)pos.y + ", " + (int)pos.z + ", '" + p.level.name + "', " + (int)x + ", " + (int)y + ", " + (int)z + ")"); } else { MySQL.executeQuery("UPDATE `Portals" + pos.portMapName + "` SET ExitMap='" + p.level.name + "', ExitX=" + (int)x + ", ExitY=" + (int)y + ", ExitZ=" + (int)z + " WHERE EntryX=" + (int)pos.x + " AND EntryY=" + (int)pos.y + " AND EntryZ=" + (int)pos.z); } //DB if (pos.portMapName == p.level.name) p.SendBlockchange(pos.x, pos.y, pos.z, bp.type); } Player.SendMessage(p, "&3Exit" + Server.DefaultColor + " block placed"); if (p.staticCommands) { bp.port.Clear(); p.blockchangeObject = bp; p.Blockchange += new Player.BlockchangeEventHandler(EntryChange); } }
public void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type) { p.ClearBlockchange(); CatchPos cpos = (CatchPos)p.blockchangeObject; cpos.message = cpos.message.Replace("'", "\\'"); DataTable Messages = MySQL.fillData("SELECT * FROM `Messages" + p.level.name + "` WHERE X=" + (int)x + " AND Y=" + (int)y + " AND Z=" + (int)z); Messages.Dispose(); if (Messages.Rows.Count == 0) { MySQL.executeQuery("INSERT INTO `Messages" + p.level.name + "` (X, Y, Z, Message) VALUES (" + (int)x + ", " + (int)y + ", " + (int)z + ", '" + cpos.message + "')"); } else { MySQL.executeQuery("UPDATE `Messages" + p.level.name + "` SET Message='" + cpos.message + "' WHERE X=" + (int)x + " AND Y=" + (int)y + " AND Z=" + (int)z); } Player.SendMessage(p, "Message block placed."); p.level.Blockchange(p, x, y, z, cpos.type); p.SendBlockchange(x, y, z, cpos.type); if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type) { if (!p.staticCommands) p.ClearBlockchange(); CatchPos cpos = (CatchPos)p.blockchangeObject; byte oldType = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, oldType); int diffX = 0, diffZ = 0; if (p.rot[0] <= 32 || p.rot[0] >= 224) { diffZ = -1; } else if (p.rot[0] <= 96) { diffX = 1; } else if (p.rot[0] <= 160) { diffZ = 1; } else diffX = -1; List<Pos> buffer = new List<Pos>(); Pos pos; int total = 0; if (diffX != 0) { for (ushort xx = x; total < cpos.distance; xx += (ushort)diffX) { for (ushort yy = (ushort)(y - 1); yy <= (ushort)(y + 1); yy++) for (ushort zz = (ushort)(z - 1); zz <= (ushort)(z + 1); zz++) { pos.x = xx; pos.y = yy; pos.z = zz; buffer.Add(pos); } total++; } } else { for (ushort zz = z; total < cpos.distance; zz += (ushort)diffZ) { for (ushort yy = (ushort)(y - 1); yy <= (ushort)(y + 1); yy++) for (ushort xx = (ushort)(x - 1); xx <= (ushort)(x + 1); xx++) { pos.x = xx; pos.y = yy; pos.z = zz; buffer.Add(pos); } total++; } } if (buffer.Count > p.group.maxBlocks) { Player.SendMessage(p, "You tried to drill " + buffer.Count + " blocks."); Player.SendMessage(p, "You cannot drill more than " + p.group.maxBlocks + "."); return; } foreach (Pos pos1 in buffer) { if (p.level.GetTile(pos1.x, pos1.y, pos1.z) == oldType) p.level.Blockchange(p, pos1.x, pos1.y, pos1.z, Block.air); } Player.SendMessage(p, buffer.Count + " blocks."); }
public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type) { p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); CatchPos cpos = (CatchPos)p.blockchangeObject; List<CatchPos> buffer = new List<CatchPos>(); CatchPos pos = new CatchPos(); //int totalChecks = 0; //if (Math.Abs(cpos.x - x) * Math.Abs(cpos.y - y) * Math.Abs(cpos.z - z) > 8000) { Player.SendMessage(p, "Tried to restart too many blocks. You may only restart 8000"); return; } for (ushort xx = Math.Min(cpos.x, x); xx <= Math.Max(cpos.x, x); ++xx) { for (ushort yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy) { for (ushort zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz) { if (p.level.GetTile(xx, yy, zz) != Block.air) { pos.x = xx; pos.y = yy; pos.z = zz; pos.extraInfo = cpos.extraInfo; buffer.Add(pos); } } } } try { if (cpos.extraInfo == "") { if (buffer.Count > Server.rpNormLimit) { Player.SendMessage(p, "Cannot restart more than " + Server.rpNormLimit + " blocks."); Player.SendMessage(p, "Tried to restart " + buffer.Count + " blocks."); return; } } else { if (buffer.Count > Server.rpLimit) { Player.SendMessage(p, "Tried to add physics to " + buffer.Count + " blocks."); Player.SendMessage(p, "Cannot add physics to more than " + Server.rpLimit + " blocks."); return; } } } catch { return; } foreach (CatchPos pos1 in buffer) { p.level.AddCheck(p.level.PosToInt(pos1.x, pos1.y, pos1.z), pos1.extraInfo, true); } Player.SendMessage(p, "Activated " + buffer.Count + " blocks."); if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public void AboutBlockchange(Player p, ushort x, ushort y, ushort z, byte type) { if (!p.staticCommands) p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); if (b == Block.Zero) { Player.SendMessage(p, "Invalid Block(" + x + "," + y + "," + z + ")!"); return; } p.SendBlockchange(x, y, z, b); string message = "Block (" + x + "," + y + "," + z + "): "; message += "&f" + b + " = " + Block.Name(b); Player.SendMessage(p, message + Server.DefaultColor + "."); message = p.level.foundInfo(x, y, z); if (message != "") Player.SendMessage(p, "Physics information: &a" + message); DataTable Blocks = MySQL.fillData("SELECT * FROM `Block" + p.level.name + "` WHERE X=" + (int)x + " AND Y=" + (int)y + " AND Z=" + (int)z); string Username, TimePerformed, BlockUsed; bool Deleted, foundOne = false; for (int i = 0; i < Blocks.Rows.Count; i++) { foundOne = true; Username = Blocks.Rows[i]["Username"].ToString(); TimePerformed = DateTime.Parse(Blocks.Rows[i]["TimePerformed"].ToString()).ToString("yyyy-MM-dd HH:mm:ss"); BlockUsed = Block.Name((byte)Blocks.Rows[i]["Type"]).ToString(); Deleted = (bool)Blocks.Rows[i]["Deleted"]; if (!Deleted) Player.SendMessage(p, "&3Created by " + Server.FindColor(Username.Trim()) + Username.Trim() + Server.DefaultColor + ", using &3" + BlockUsed); else Player.SendMessage(p, "&4Destroyed by " + Server.FindColor(Username.Trim()) + Username.Trim() + Server.DefaultColor + ", using &3" + BlockUsed); Player.SendMessage(p, "Date and time modified: &2" + TimePerformed); } List<Level.BlockPos> inCache = p.level.blockCache.FindAll(bP => bP.x == x && bP.y == y && bP.z == z); for (int i = 0; i < inCache.Count; i++) { foundOne = true; Deleted = inCache[i].deleted; Username = inCache[i].name; TimePerformed = inCache[i].TimePerformed.ToString("yyyy-MM-dd HH:mm:ss"); BlockUsed = Block.Name(inCache[i].type); if (!Deleted) Player.SendMessage(p, "&3Created by " + Server.FindColor(Username.Trim()) + Username.Trim() + Server.DefaultColor + ", using &3" + BlockUsed); else Player.SendMessage(p, "&4Destroyed by " + Server.FindColor(Username.Trim()) + Username.Trim() + Server.DefaultColor + ", using &3" + BlockUsed); Player.SendMessage(p, "Date and time modified: &2" + TimePerformed); } if (!foundOne) Player.SendMessage(p, "This block has not been modified since the map was cleared."); Blocks.Dispose(); GC.Collect(); GC.WaitForPendingFinalizers(); }
public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type) { p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); CatchPos cpos = (CatchPos)p.blockchangeObject; if (cpos.y == y) { Player.SendMessage(p, "Cannot create a stairway 0 blocks high."); return; } ushort xx, zz; int currentState = 0; xx = cpos.x; zz = cpos.z; if (cpos.x > x && cpos.z > z) currentState = 0; else if (cpos.x > x && cpos.z < z) currentState = 1; else if (cpos.x < x && cpos.z > z) currentState = 2; else currentState = 3; for (ushort yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy) { if (currentState == 0) { xx++; p.level.Blockchange(p, xx, yy, zz, Block.staircasestep); xx++; p.level.Blockchange(p, xx, yy, zz, Block.staircasefull); currentState = 1; } else if (currentState == 1) { zz++; p.level.Blockchange(p, xx, yy, zz, Block.staircasestep); zz++; p.level.Blockchange(p, xx, yy, zz, Block.staircasefull); currentState = 2; } else if (currentState == 2) { xx--; p.level.Blockchange(p, xx, yy, zz, Block.staircasestep); xx--; p.level.Blockchange(p, xx, yy, zz, Block.staircasefull); currentState = 3; } else { zz--; p.level.Blockchange(p, xx, yy, zz, Block.staircasestep); zz--; p.level.Blockchange(p, xx, yy, zz, Block.staircasefull); currentState = 0; } /* if (cpos.x == xx && cpos.z == zz || cpos.x == xx + 1 && cpos.z == zz) xx++; else if (cpos.x == xx + 2 && cpos.z == zz || cpos.x == xx + 2 && cpos.z == zz + 1) zz++; else if (cpos.x == xx + 2 && cpos.z == zz + 2 || cpos.x == xx + 1 && cpos.z == zz + 2) xx--; else zz--; */ } if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type) { p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); CatchPos bp = (CatchPos)p.blockchangeObject; bp.x = x; bp.y = y; bp.z = z; p.blockchangeObject = bp; p.Blockchange += new Player.BlockchangeEventHandler(Blockchange2); }
public void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type) { try { p.ClearBlockchange(); CatchPos cpos = (CatchPos)p.blockchangeObject; if (cpos.type == Block.Zero) cpos.type = p.bindings[type]; byte oldType = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, oldType); if (cpos.type == oldType) { Player.SendMessage(p, "Cannot fill the same time"); return; } if (!Block.canPlace(p, oldType) && !Block.BuildIn(oldType)) { Player.SendMessage(p, "Cannot fill that."); return; } byte[] mapBlocks = new byte[p.level.blocks.Length]; List<Pos> buffer = new List<Pos>(); p.level.blocks.CopyTo(mapBlocks, 0); fromWhere.Clear(); deep = 0; FloodFill(p, x, y, z, cpos.type, oldType, cpos.FillType, ref mapBlocks, ref buffer); int totalFill = fromWhere.Count; for (int i = 0; i < totalFill; i++) { totalFill = fromWhere.Count; Pos pos = fromWhere[i]; deep = 0; FloodFill(p, pos.x, pos.y, pos.z, cpos.type, oldType, cpos.FillType, ref mapBlocks, ref buffer); totalFill = fromWhere.Count; } fromWhere.Clear(); if (buffer.Count > p.group.maxBlocks) { Player.SendMessage(p, "You tried to fill " + buffer.Count + " blocks."); Player.SendMessage(p, "You cannot fill more than " + p.group.maxBlocks + "."); return; } foreach (Pos pos in buffer) { p.level.Blockchange(p, pos.x, pos.y, pos.z, cpos.type); } Player.SendMessage(p, "Filled " + buffer.Count + " blocks."); buffer.Clear(); if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); } catch (Exception e) { Server.ErrorLog(e); } }
public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type) { type = p.bindings[type]; p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); CatchPos cpos = (CatchPos)p.blockchangeObject; ushort cur; if (x == cpos.x && z == cpos.z) { Player.SendMessage(p, "No direction was selected"); return; } if (Math.Abs(cpos.x - x) > Math.Abs(cpos.z - z)) { cur = cpos.x; if (x > cpos.x) { foreach (char c in cpos.givenMessage) { cur = FindReference.writeLetter(p, c, cur, cpos.y, cpos.z, type, 0); } } else { foreach (char c in cpos.givenMessage) { cur = FindReference.writeLetter(p, c, cur, cpos.y, cpos.z, type, 1); } } } else { cur = cpos.z; if (z > cpos.z) { foreach (char c in cpos.givenMessage) { cur = FindReference.writeLetter(p, c, cpos.x, cpos.y, cur, type, 2); } } else { foreach (char c in cpos.givenMessage) { cur = FindReference.writeLetter(p, c, cpos.x, cpos.y, cur, type, 3); } } } if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public override void Use(Player p, string message) { p.ClearBlockchange(); switch (message.ToLower()) { case "2": case "cactus": p.Blockchange += new Player.BlockchangeEventHandler(AddCactus); break; default: p.Blockchange += new Player.BlockchangeEventHandler(AddTree); break; } Player.SendMessage(p, "Select where you wish your tree to grow"); p.painting = false; }
public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type) { p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); CatchPos cpos = (CatchPos)p.blockchangeObject; p.CopyBuffer.Clear(); int TotalAir = 0; if (cpos.type == 2) p.copyAir = true; else p.copyAir = false; for (ushort xx = Math.Min(cpos.x, x); xx <= Math.Max(cpos.x, x); ++xx) for (ushort yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy) for (ushort zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz) { b = p.level.GetTile(xx, yy, zz); if (Block.canPlace(p, b)) { if (b == Block.air && cpos.type != 2 || cpos.ignoreTypes.Contains(b)) TotalAir++; if (cpos.ignoreTypes.Contains(b)) BufferAdd(p, (ushort)(xx - cpos.x), (ushort)(yy - cpos.y), (ushort)(zz - cpos.z), Block.air); else BufferAdd(p, (ushort)(xx - cpos.x), (ushort)(yy - cpos.y), (ushort)(zz - cpos.z), b); } else BufferAdd(p, (ushort)(xx - cpos.x), (ushort)(yy - cpos.y), (ushort)(zz - cpos.z), Block.air); } if ((p.CopyBuffer.Count - TotalAir) > p.group.maxBlocks) { Player.SendMessage(p, "You tried to copy " + p.CopyBuffer.Count + " blocks."); Player.SendMessage(p, "You cannot copy more than " + p.group.maxBlocks + "."); p.CopyBuffer.Clear(); return; } if (cpos.type == 1) for (ushort xx = Math.Min(cpos.x, x); xx <= Math.Max(cpos.x, x); ++xx) for (ushort yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy) for (ushort zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz) { b = p.level.GetTile(xx, yy, zz); if (b != Block.air && Block.canPlace(p, b)) p.level.Blockchange(p, xx, yy, zz, Block.air); } Player.SendMessage(p, (p.CopyBuffer.Count - TotalAir) + " blocks copied."); if (allowoffset != -1) { Player.SendMessage(p, "Place a block to determine where to paste from"); p.Blockchange += new Player.BlockchangeEventHandler(Blockchange3); } }
public override void Use(Player p, string message) { p.ClearBlockchange(); p.painting = false; p.BlockAction = 0; p.megaBoid = false; p.cmdTimer = false; p.staticCommands = false; p.deleteMode = false; p.ZoneCheck = false; p.modeType = 0; p.aiming = false; p.onTrain = false; Player.SendMessage(p, "Every toggle or action was aborted."); }
public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type) { p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); CatchPos cpos = (CatchPos)p.blockchangeObject; List<Pos> buffer = new List<Pos>(); Pos pos; bool AddMe = false; for (ushort xx = Math.Min(cpos.x, x); xx <= Math.Max(cpos.x, x); ++xx) for (ushort yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy) for (ushort zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz) { AddMe = true; if (!Block.RightClick(Block.Convert(p.level.GetTile(xx, yy, zz)), true) && p.level.GetTile(xx, yy, zz) != cpos.countOther) { if (Block.RightClick(Block.Convert(p.level.GetTile((ushort)(xx - 1), yy, zz))) || p.level.GetTile((ushort)(xx - 1), yy, zz) == cpos.countOther) AddMe = false; else if (Block.RightClick(Block.Convert(p.level.GetTile((ushort)(xx + 1), yy, zz))) || p.level.GetTile((ushort)(xx + 1), yy, zz) == cpos.countOther) AddMe = false; else if (Block.RightClick(Block.Convert(p.level.GetTile(xx, (ushort)(yy - 1), zz))) || p.level.GetTile(xx, (ushort)(yy - 1), zz) == cpos.countOther) AddMe = false; else if (Block.RightClick(Block.Convert(p.level.GetTile(xx, (ushort)(yy + 1), zz))) || p.level.GetTile(xx, (ushort)(yy + 1), zz) == cpos.countOther) AddMe = false; else if (Block.RightClick(Block.Convert(p.level.GetTile(xx, yy, (ushort)(zz - 1)))) || p.level.GetTile(xx, yy, (ushort)(zz - 1)) == cpos.countOther) AddMe = false; else if (Block.RightClick(Block.Convert(p.level.GetTile(xx, yy, (ushort)(zz + 1)))) || p.level.GetTile(xx, yy, (ushort)(zz + 1)) == cpos.countOther) AddMe = false; } else AddMe = false; if (AddMe) { pos.x = xx; pos.y = yy; pos.z = zz; buffer.Add(pos); } } if (buffer.Count > p.group.maxBlocks) { Player.SendMessage(p, "You tried to hollow more than " + buffer.Count + " blocks."); Player.SendMessage(p, "You cannot hollow more than " + p.group.maxBlocks + "."); return; } buffer.ForEach(delegate(Pos pos1) { p.level.Blockchange(p, pos1.x, pos1.y, pos1.z, Block.air); }); Player.SendMessage(p, "You hollowed " + buffer.Count + " blocks."); if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type) { p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); CatchPos cpos = (CatchPos)p.blockchangeObject; unchecked { if (cpos.type != (byte)-1) { type = cpos.type; } } List<Pos> buffer = new List<Pos>(); Pos pos; bool AddMe = false; for (ushort xx = Math.Min(cpos.x, x); xx <= Math.Max(cpos.x, x); ++xx) for (ushort yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy) for (ushort zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz) { AddMe = false; if (p.level.GetTile((ushort)(xx - 1), yy, zz) == cpos.type) AddMe = true; else if (p.level.GetTile((ushort)(xx + 1), yy, zz) == cpos.type) AddMe = true; else if (p.level.GetTile(xx, (ushort)(yy - 1), zz) == cpos.type) AddMe = true; else if (p.level.GetTile(xx, (ushort)(yy + 1), zz) == cpos.type) AddMe = true; else if (p.level.GetTile(xx, yy, (ushort)(zz - 1)) == cpos.type) AddMe = true; else if (p.level.GetTile(xx, yy, (ushort)(zz + 1)) == cpos.type) AddMe = true; if (AddMe && p.level.GetTile(xx, yy, zz) != cpos.type) { pos.x = xx; pos.y = yy; pos.z = zz; buffer.Add(pos); } } if (buffer.Count > p.group.maxBlocks) { Player.SendMessage(p, "You tried to outline more than " + buffer.Count + " blocks."); Player.SendMessage(p, "You cannot outline more than " + p.group.maxBlocks + "."); return; } buffer.ForEach(delegate(Pos pos1) { p.level.Blockchange(p, pos1.x, pos1.y, pos1.z, cpos.type2); }); Player.SendMessage(p, "You outlined " + buffer.Count + " blocks."); if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type) { p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); CatchPos cpos = (CatchPos)p.blockchangeObject; ushort xx, yy, zz; int foundBlocks = 0; for (xx = Math.Min(cpos.x, x); xx <= Math.Max(cpos.x, x); ++xx) for (yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy) for (zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz) { if (p.level.GetTile(xx, yy, zz) != cpos.toIgnore) foundBlocks++; } Player.SendMessage(p, foundBlocks + " blocks are between (" + cpos.x + ", " + cpos.y + ", " + cpos.z + ") and (" + x + ", " + y + ", " + z + ")"); if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type) { p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); Player.UndoPos Pos1; //p.UndoBuffer.Clear(); p.CopyBuffer.ForEach(delegate(Player.CopyPos pos) { Pos1.x = (ushort)(Math.Abs(pos.x) + x); Pos1.y = (ushort)(Math.Abs(pos.y) + y); Pos1.z = (ushort)(Math.Abs(pos.z) + z); if (pos.type != Block.air || p.copyAir) unchecked { if (p.level.GetTile(Pos1.x, Pos1.y, Pos1.z) != Block.Zero) p.level.Blockchange(p, (ushort)(Pos1.x + p.copyoffset[0]), (ushort)(Pos1.y + p.copyoffset[1]), (ushort)(Pos1.z + p.copyoffset[2]), pos.type); } }); Player.SendMessage(p, "Pasted " + p.CopyBuffer.Count + " blocks."); if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public override void Use(Player p, string message) { int number = message.Split(' ').Length; if (number != 2) { Help(p); return; } int pos = message.IndexOf(' '); string t = message.Substring(0, pos).ToLower(); string t2 = message.Substring(pos + 1).ToLower(); byte type = Block.Byte(t); if (type == 255) { Player.SendMessage(p, "There is no block \"" + t + "\"."); return; } byte type2 = Block.Byte(t2); if (type2 == 255) { Player.SendMessage(p, "There is no block \"" + t2 + "\"."); return; } if (!Block.canPlace(p, type) && !Block.BuildIn(type)) { Player.SendMessage(p, "Cannot replace that."); return; } if (!Block.canPlace(p, type2)) { Player.SendMessage(p, "Cannot place that."); return; } CatchPos cpos; cpos.type2 = type2; cpos.type = type; cpos.x = 0; cpos.y = 0; cpos.z = 0; p.blockchangeObject = cpos; Player.SendMessage(p, "Place two blocks to determine the edges."); p.ClearBlockchange(); p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public override void Use(Player p, string message) { if (message.IndexOf(' ') != -1) { Help(p); return; } CatchPos cpos; cpos.toIgnore = Block.Byte(message); if (cpos.toIgnore == Block.Zero && message != "") { Player.SendMessage(p, "Could not find block specified"); return; } cpos.x = 0; cpos.y = 0; cpos.z = 0; p.blockchangeObject = cpos; Player.SendMessage(p, "Place two blocks to determine the edges."); p.ClearBlockchange(); p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type) { System.Timers.Timer megaTimer = new System.Timers.Timer(1); p.ClearBlockchange(); byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); CatchPos cpos = (CatchPos)p.blockchangeObject; unchecked { if (cpos.type != (byte)-1) type = cpos.type; else type = p.bindings[type]; } List<Pos> buffer = new List<Pos>(); ushort xx; ushort yy; ushort zz; switch (cpos.solid) { case SolidType.solid: buffer.Capacity = Math.Abs(cpos.x - x) * Math.Abs(cpos.y - y) * Math.Abs(cpos.z - z); for (xx = Math.Min(cpos.x, x); xx <= Math.Max(cpos.x, x); ++xx) for (yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy) for (zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz) { if (p.level.GetTile(xx, yy, zz) != type) { BufferAdd(buffer, xx, yy, zz); } } break; case SolidType.hollow: //todo work out if theres 800 blocks used before making the buffer for (yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy) for (zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz) { if (p.level.GetTile(cpos.x, yy, zz) != type) { BufferAdd(buffer, cpos.x, yy, zz); } if (cpos.x != x) { if (p.level.GetTile(x, yy, zz) != type) { BufferAdd(buffer, x, yy, zz); } } } if (Math.Abs(cpos.x - x) >= 2) { for (xx = (ushort)(Math.Min(cpos.x, x) + 1); xx <= Math.Max(cpos.x, x) - 1; ++xx) for (zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz) { if (p.level.GetTile(xx, cpos.y, zz) != type) { BufferAdd(buffer, xx, cpos.y, zz); } if (cpos.y != y) { if (p.level.GetTile(xx, y, zz) != type) { BufferAdd(buffer, xx, y, zz); } } } if (Math.Abs(cpos.y - y) >= 2) { for (xx = (ushort)(Math.Min(cpos.x, x) + 1); xx <= Math.Max(cpos.x, x) - 1; ++xx) for (yy = (ushort)(Math.Min(cpos.y, y) + 1); yy <= Math.Max(cpos.y, y) - 1; ++yy) { if (p.level.GetTile(xx, yy, cpos.z) != type) { BufferAdd(buffer, xx, yy, cpos.z); } if (cpos.z != z) { if (p.level.GetTile(xx, yy, z) != type) { BufferAdd(buffer, xx, yy, z); } } } } } break; case SolidType.walls: for (yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy) for (zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz) { if (p.level.GetTile(cpos.x, yy, zz) != type) { BufferAdd(buffer, cpos.x, yy, zz); } if (cpos.x != x) { if (p.level.GetTile(x, yy, zz) != type) { BufferAdd(buffer, x, yy, zz); } } } if (Math.Abs(cpos.x - x) >= 2) { if (Math.Abs(cpos.z - z) >= 2) { for (xx = (ushort)(Math.Min(cpos.x, x) + 1); xx <= Math.Max(cpos.x, x) - 1; ++xx) for (yy = (ushort)(Math.Min(cpos.y, y)); yy <= Math.Max(cpos.y, y); ++yy) { if (p.level.GetTile(xx, yy, cpos.z) != type) { BufferAdd(buffer, xx, yy, cpos.z); } if (cpos.z != z) { if (p.level.GetTile(xx, yy, z) != type) { BufferAdd(buffer, xx, yy, z); } } } } } break; } if (buffer.Count > 450000) { Player.SendMessage(p, "You cannot megaboid more than 450000 blocks."); Player.SendMessage(p, "You tried to megaboid " + buffer.Count + " blocks."); return; } Player.SendMessage(p, buffer.Count.ToString() + " blocks."); Player.SendMessage(p, "Use /abort to cancel the megaboid at any time."); p.megaBoid = true; Pos pos; int CurrentLoop = 0; Level currentLevel = p.level; megaTimer.Start(); megaTimer.Elapsed += delegate { if (p.megaBoid == true) { pos = buffer[CurrentLoop]; try { currentLevel.Blockchange(pos.x, pos.y, pos.z, type); } catch { } CurrentLoop++; if (CurrentLoop % 1000 == 0) Player.SendMessage(p, CurrentLoop + " blocks down, " + (buffer.Count - CurrentLoop) + " to go."); if (CurrentLoop >= buffer.Count) { Player.SendMessage(p, "Completed megaboid"); buffer.Clear(); p.megaBoid = false; megaTimer.Stop(); } } else { megaTimer.Stop(); } }; if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public override void Use(Player p, string message) { if (p.megaBoid == true) { Player.SendMessage(p, "You may only have on Megaboid going at once. Use /abort to cancel it."); return; } int number = message.Split(' ').Length; if (number > 2) { Help(p); return; } if (number == 2) { int pos = message.IndexOf(' '); string t = message.Substring(0, pos).ToLower(); string s = message.Substring(pos + 1).ToLower(); byte type = Block.Byte(t); if (type == 255) { Player.SendMessage(p, "There is no block \"" + t + "\"."); return; } if (!Block.canPlace(p, type)) { Player.SendMessage(p, "Cannot place that."); return; } SolidType solid; if (s == "solid") { solid = SolidType.solid; } else if (s == "hollow") { solid = SolidType.hollow; } else if (s == "walls") { solid = SolidType.walls; } else { Help(p); return; } CatchPos cpos; cpos.solid = solid; cpos.type = type; cpos.x = 0; cpos.y = 0; cpos.z = 0; p.blockchangeObject = cpos; } else if (message != "") { SolidType solid = SolidType.solid; message = message.ToLower(); byte type; unchecked { type = (byte)-1; } if (message == "solid") { solid = SolidType.solid; } else if (message == "hollow") { solid = SolidType.hollow; } else if (message == "walls") { solid = SolidType.walls; } else { byte t = Block.Byte(message); if (t == 255) { Player.SendMessage(p, "There is no block \"" + message + "\"."); return; } if (!Block.canPlace(p, t)) { Player.SendMessage(p, "Cannot place that."); return; } type = t; } CatchPos cpos; cpos.solid = solid; cpos.type = type; cpos.x = 0; cpos.y = 0; cpos.z = 0; p.blockchangeObject = cpos; } else { CatchPos cpos; cpos.solid = SolidType.solid; unchecked { cpos.type = (byte)-1; } cpos.x = 0; cpos.y = 0; cpos.z = 0; p.blockchangeObject = cpos; } Player.SendMessage(p, "Place two blocks to determine the edges."); p.ClearBlockchange(); p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public override void Use(Player p, string message) { CatchPos cpos; cpos.x = 0; cpos.y = 0; cpos.z = 0; p.blockchangeObject = cpos; Player.SendMessage(p, "Place two blocks to determine the height."); p.ClearBlockchange(); p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public override void Use(Player p, string message) { CatchPos cpos; if (message == "") { p.ZoneCheck = true; Player.SendMessage(p, "Place a block where you would like to check for zones."); return; } else if (p.group.Permission < LevelPermission.Operator) { Player.SendMessage(p, "Reserved for OP+"); return; } if (message.IndexOf(' ') == -1) { switch (message.ToLower()) { case "del": p.zoneDel = true; Player.SendMessage(p, "Place a block where you would like to delete a zone."); return; default: Help(p); return; } } if (message.ToLower() == "del all") { if (p.group.Permission < LevelPermission.Admin) { Player.SendMessage(p, "Only a SuperOP may delete all zones at once"); return; } else { for (int i = 0; i < p.level.ZoneList.Count; i++) { Level.Zone Zn = p.level.ZoneList[i]; MySQL.executeQuery("DELETE FROM `Zone" + p.level.name + "` WHERE Owner='" + Zn.Owner + "' AND SmallX='" + Zn.smallX + "' AND SMALLY='" + Zn.smallY + "' AND SMALLZ='" + Zn.smallZ + "' AND BIGX='" + Zn.bigX + "' AND BIGY='" + Zn.bigY + "' AND BIGZ='" + Zn.bigZ + "'"); Player.SendMessage(p, "Zone deleted for &b" + Zn.Owner); p.level.ZoneList.Remove(p.level.ZoneList[i]); if (i == p.level.ZoneList.Count) { Player.SendMessage(p, "Finished removing all zones"); return; } i--; } } } if (p.group.Permission < LevelPermission.Operator) { Player.SendMessage(p, "Setting zones is reserved for OP+"); return; } if (Group.Find(message.Split(' ')[1]) != null) { message = message.Split(' ')[0] + " grp" + Group.Find(message.Split(' ')[1]).name; } if (message.Split(' ')[0].ToLower() == "add") { Player foundPlayer = Player.Find(message.Split(' ')[1]); if (foundPlayer == null) cpos.Owner = message.Split(' ')[1].ToString(); else cpos.Owner = foundPlayer.name; } else { Help(p); return; } if (!Player.ValidName(cpos.Owner)) { Player.SendMessage(p, "INVALID NAME."); return; } cpos.x = 0; cpos.y = 0; cpos.z = 0; p.blockchangeObject = cpos; Player.SendMessage(p, "Place two blocks to determine the edges."); Player.SendMessage(p, "Zone for: &b" + cpos.Owner + "."); p.ClearBlockchange(); p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }
public override void Use(Player p, string message) { int num = message.Split(' ').Length; if (num == 3) { string[] strings = message.Split(' '); for (int i = 0; i < num; i++) { strings[i] = strings[i].ToLower(); } if (strings[0] == "team") { if (strings[1] == "add") { string color = c.Parse(strings[2]); if (color == ""){Player.SendMessage(p, "Invalid team color chosen."); return;} char teamCol = (char)color[1]; switch (teamCol) { case '2': case '5': case '8': case '9': case 'c': case 'e': case 'f': AddTeam(p, color); break; default: Player.SendMessage(p, "Invalid team color chosen."); return; } } else if (strings[1] == "remove") { string color = c.Parse(strings[2]); if (color == "") { Player.SendMessage(p, "Invalid team color chosen."); return; } char teamCol = (char)color[1]; switch (teamCol) { case '2': case '5': case '8': case '9': case 'c': case 'e': case 'f': RemoveTeam(p, color); break; default: Player.SendMessage(p, "Invalid team color chosen."); return; } } } } else if (num == 2) { string[] strings = message.Split(' '); for (int i = 0; i < num; i++) { strings[i] = strings[i].ToLower(); } if (strings[0] == "debug") { Debug(p, strings[1]); } else if (strings[0] == "flag") { string color = c.Parse(strings[1]); if (color == "") { Player.SendMessage(p, "Invalid team color chosen."); return; } char teamCol = (char)color[1]; if (p.level.ctfgame.teams.Find(team => team.color == teamCol) == null) { Player.SendMessage(p, "Invalid team color chosen."); return; } CatchPos cpos; cpos.x = 0; cpos.y = 0; cpos.z = 0; cpos.color = color; p.blockchangeObject = cpos; Player.SendMessage(p, "Place a block to determine where to place the flag."); p.ClearBlockchange(); p.Blockchange += new Player.BlockchangeEventHandler(FlagBlockChange); } else if (strings[0] == "spawn") { string color = c.Parse(strings[1]); if (color == "") { Player.SendMessage(p, "Invalid team color chosen."); return; } char teamCol = (char)color[1]; if (p.level.ctfgame.teams.Find(team => team.color == teamCol) == null) { Player.SendMessage(p, "Invalid team color chosen."); return; } AddSpawn(p, color); } else if (strings[0] == "points") { int i = 0; Int32.TryParse(strings[1], out i); if (i == 0) { Player.SendMessage(p, "You must choose a points value greater than 0!"); return; } p.level.ctfgame.maxPoints = i; Player.SendMessage(p, "Max round points has been set to " + i); } } else if (num == 1) { if (message.ToLower() == "start") { if (!p.level.ctfmode) { p.level.ctfmode = true; } p.level.ctfgame.gameOn = true; p.level.ctfgame.GameStart(); } else if (message.ToLower() == "stop") { if (p.level.ctfmode) { p.level.ctfmode = false; } p.level.ctfmode = false; p.level.ctfgame.gameOn = false; p.level.ChatLevel(p.color + p.name + Server.DefaultColor + " has ended the game"); } else if (message.ToLower() == "ff") { if (p.level.ctfgame.friendlyfire) { p.level.ChatLevel("Friendly fire has been disabled."); p.level.ctfgame.friendlyfire = false; } else { p.level.ChatLevel("Friendly fire has been enabled."); p.level.ctfgame.friendlyfire = true; } } else if (message.ToLower() == "clear") { List<Team> storedT = new List<Team>(); for (int i = 0; i < p.level.ctfgame.teams.Count; i++) { storedT.Add(p.level.ctfgame.teams[i]); } foreach (Team t in storedT) { p.level.ctfgame.RemoveTeam("&" + t.color); } p.level.ctfgame.onTeamCheck.Stop(); p.level.ctfgame.onTeamCheck.Dispose(); p.level.ctfgame.gameOn = false; p.level.ctfmode = false; p.level.ctfgame = new CTFGame(); p.level.ctfgame.mapOn = p.level; Player.SendMessage(p, "CTF data has been cleared."); } else if (message.ToLower() == "") { if (p.level.ctfmode) { p.level.ctfmode = false; p.level.ChatLevel("CTF Mode has been disabled."); } else if (!p.level.ctfmode) { p.level.ctfmode = true; p.level.ChatLevel("CTF Mode has been enabled."); } } } }
void AddTree(Player p, ushort x, ushort y, ushort z, byte type) { Random Rand = new Random(); byte height = (byte)Rand.Next(5, 8); for (ushort yy = 0; yy < height; yy++) p.level.Blockchange(p, x, (ushort)(y + yy), z, Block.trunk); short top = (short)(height - Rand.Next(2, 4)); for (short xx = (short)-top; xx <= top; ++xx) { for (short yy = (short)-top; yy <= top; ++yy) { for (short zz = (short)-top; zz <= top; ++zz) { short Dist = (short)(Math.Sqrt(xx * xx + yy * yy + zz * zz)); if (Dist < top + 1) { if (Rand.Next((int)(Dist)) < 2) { try { p.level.Blockchange(p, (ushort)(x + xx), (ushort)(y + yy + height), (ushort)(z + zz), Block.leaf); } catch { } } } } } } if (!p.staticCommands) p.ClearBlockchange(); }
void FlagBlockChange(Player p, ushort x, ushort y, ushort z, byte type) { CatchPos bp = (CatchPos)p.blockchangeObject; byte b = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, b); p.ClearBlockchange(); AddFlag(p, bp.color, x, y, z); }
public override void Use(Player p, string message) { if (message == "") { Help(p); return; } CatchPos cpos; cpos.givenMessage = message.ToUpper(); cpos.x = 0; cpos.y = 0; cpos.z = 0; p.blockchangeObject = cpos; Player.SendMessage(p, "Place two blocks to determine direction."); p.ClearBlockchange(); p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); }