void BlockChange(Player sender, BlockChangeEventArgs e) { e.Cancel(); var raw = (BrushData)sender.ExtraData.GetIfExist <object, object> ("BrushData"); if (raw == null) { sender.SendMessage("An error occurred while trying to brush"); sender.OnPlayerBlockChange.Normal -= BlockChange; return; } byte block = raw.Block != 255 ? raw.Block : e.Holding; Vector3S loc = new Vector3S(e.X, e.Z, e.Y); IBrush b = (IBrush)Activator.CreateInstance(raw.BrushType); var qq = b.Draw(loc, raw.Block, raw.Size); if (sender.Group.MaxBlockChange < qq.Count()) { sender.SendMessage("You cannot set that many blocks"); return; } foreach (var fml in qq) { sender.SendBlockChange((ushort)fml.x, (ushort)fml.z, (ushort)fml.y, block); } #if DEBUG sender.SendMessage(string.Format("Brushed {0} blocks", qq.Count())); #endif }
public void BlockChange(Player p, BlockChangeEventArgs args) { p.OnPlayerBlockChange.Normal -= BlockChange; WorldComponent.GenerateTree(p, args.X, args.Z, args.Y, (TreeType)p.ExtraData["TreeType"], ServerSettings.GetSettingBoolean("TreesGoThrough")); args.Cancel(); p.ExtraData.Remove("TreeType"); }
private void Game_Client_BlockChanged(object sender, BlockChangeEventArgs e) { var position = e.Position.AsVector3(); WorldLighting.EnqueueOperation(new BoundingBox( position, position + Coordinates3D.One.AsVector3()), false); WorldLighting.EnqueueOperation(new BoundingBox( position, position + Coordinates3D.One.AsVector3()), true); var posA = e.Position; posA.Y = 0; var posB = e.Position; posB.Y = World.World.Height; posB.X++; posB.Z++; WorldLighting.EnqueueOperation(new BoundingBox(posA.AsVector3(), posB.AsVector3()), true); WorldLighting.EnqueueOperation(new BoundingBox(posA.AsVector3(), posB.AsVector3()), false); for (var i = 0; i < 100; i++) { if (!WorldLighting.TryLightNext()) { break; } } }
public void CatchBlock2(Player sender, BlockChangeEventArgs args) { ushort x = args.X; ushort y = args.Y; ushort z = args.Z; byte NewType = args.Holding; bool placed = (args.Action == ActionType.Place); CatchPos FirstBlock = (CatchPos)sender.GetDatapass("CmdReplace_cpos"); ; unchecked { if (FirstBlock.type != (byte)-1) { NewType = FirstBlock.type; } } List<Pos> buffer = new List<Pos>(); for (ushort xx = Math.Min((ushort)(FirstBlock.pos.x), x); xx <= Math.Max((ushort)(FirstBlock.pos.x), x); ++xx) { for (ushort zz = Math.Min((ushort)(FirstBlock.pos.z), z); zz <= Math.Max((ushort)(FirstBlock.pos.z), z); ++zz) { for (ushort yy = Math.Min((ushort)(FirstBlock.pos.y), y); yy <= Math.Max((ushort)(FirstBlock.pos.y), y); ++yy) { Vector3S loop = new Vector3S(xx, zz, yy); if (sender.Level.GetBlock(loop) == NewType) { BufferAdd(buffer, loop); } } } } //Group Max Blocks permissions here sender.SendMessage(buffer.Count.ToString() + " blocks."); //Level Blockqueue .-. buffer.ForEach(delegate(Pos pos) { sender.Level.BlockChange((ushort)(pos.pos.x), (ushort)(pos.pos.z), (ushort)(pos.pos.y), FirstBlock.type2); }); }
private void OnPlayerBlockChangeOnNormal(Player sender, BlockChangeEventArgs args) { doory.Tick(sender.Level); bool tried = false; doory.SetPos(args.X, args.Y, args.Z); var b = sender.ExtraData["BlockDoor"] as PhysicsBlock; // DISCOVERED THE 'B' IS A STANDARD BLOCK AND WE'RE TRYING TO PARSE IT AS A PHYSICS BLOCK // I'LL FIX THIS ASAP if (b == null) { return; } if (!tried) { if (args.Action == ActionType.Delete) { sender.Level.pblocks.Add(b); } } // var b = (Block)sender.ExtraData["BlockDoor"]; // if (args.Action == ActionType.Delete) return; // args.Holding = b; // var physicsBlock = b as PhysicsBlock; // if (physicsBlock == null) return; //sender.Level.pblocks.Add(physicsBlock); }
void OnBlockChange(Player sender, BlockChangeEventArgs e) { sender.OnPlayerBlockChange.Normal -= OnBlockChange; e.Cancel(); using (var data = Database.fillData("SELECT * FROM Blocks WHERE X = '" + e.X + "' AND Y = '" + e.Y + "' AND Z = '" + e.Z + "' AND Level = '" + sender.Level.Name.MySqlEscape() + "';")) { if (data.Rows.Count == 0) { sender.SendMessage("This block has not been modified since the map was cleared or created."); return; } for (int i = 0; i < data.Rows.Count; i++) { string username; string color; string block; string time; bool deleted; using (var playerData = Database.fillData("SELECT * FROM _players WHERE UID = " + data.Rows[i]["UID"].ToString())) { username = playerData.Rows[0]["Name"].ToString(); color = playerData.Rows[0]["color"].ToString(); } block = ((Block)byte.Parse(data.Rows[i]["Block"].ToString())).Name; time = DateTime.Parse(data.Rows[i]["Date"].ToString()).ToString("yyyy-MM-dd HH:mm:ss"); deleted = data.Rows[i]["Deleted"].ToString().ToLower() == "true"; sender.SendMessage((deleted ? "&4Destroyed by " : "&3Created by ") + Server.DefaultColor + color + username + Server.DefaultColor + ", using &3" + block + Server.DefaultColor + " At " + time); } } if (sender.StaticCommandsEnabled) { sender.SendMessage("Break block to get info"); sender.OnPlayerBlockChange.Normal += OnBlockChange; } }
protected internal void OnBlockChanged(BlockChangeEventArgs e) { if (BlockChanged != null) { BlockChanged(this, e); } }
void OnPlayerBlockChange_Normal(Player sender, BlockChangeEventArgs args) { args.Cancel(); if (args.Current == 0 && args.Action == ActionType.Delete) { args.Current = 20; } sender.OnPlayerBlockChange.Normal -= OnPlayerBlockChange_Normal; if (sender.ExtraData["Cursor"] != null) { Vector3S cursor; if (sender.ExtraData["Cursor"].GetType() == typeof(Vector3S)) { cursor = (Vector3S)sender.ExtraData["Cursor"]; } else { cursor = new Vector3S(); cursor.FromString((string)sender.ExtraData["Cursor"]); } if (args.Action == ActionType.Place) { sender.Click((ushort)cursor.x, (ushort)cursor.z, (ushort)(cursor.y + 1), args.Holding); } else { sender.Click((ushort)cursor.x, (ushort)cursor.z, (ushort)(cursor.y), args.Holding, false); } } sender.OnPlayerBlockChange.Normal += OnPlayerBlockChange_Normal; Curse(sender); }
void OnAllPlayersBlockChange_Low(Player sender, BlockChangeEventArgs args) { if (args.Canceled) { return; } if (args.Action == ActionType.Place) { #region Dirt/Grass if (autoGrass && args.Holding == Block.BlockList.DIRT && Block.CanPassLight(sender.Level.GetBlock(args.X, args.Z, args.Y + 1))) { args.Holding = Block.BlockList.GRASS; } if (autoDirt && args.Holding != Block.BlockList.AIR && sender.Level.GetBlock(args.X, args.Z, args.Y - 1) == Block.BlockList.GRASS) { sender.Level.BlockChange(args.X, args.Z, (ushort)(args.Y - 1), Block.BlockList.DIRT, sender); } #endregion if (autoDoubleStair && args.Holding == Block.BlockList.STAIR && sender.Level.GetBlock(args.X, args.Z, args.Y - 1) == Block.BlockList.STAIR) { args.Cancel(); sender.Level.BlockChange(args.X, args.Z, (ushort)(args.Y - 1), Block.BlockList.DOUBLE_STAIR, sender); } } else { if (autoGrass && sender.Level.GetBlock(args.X, args.Z, args.Y - 1) == Block.BlockList.DIRT) { sender.Level.BlockChange(args.X, args.Z, (ushort)(args.Y - 1), Block.BlockList.GRASS, sender); } } }
void CatchBlockTwo(Player sender, BlockChangeEventArgs e) { e.Cancel(); sender.OnPlayerBlockChange.Normal -= CatchBlockTwo; try { BlockInfo raw = (BlockInfo)sender.ExtraData.GetIfExist <object, object>("Command.Line"); Vector3S from = raw.Pos; Vector3S to = new Vector3S(e.X, e.Z, e.Y); byte block = raw.Block; IEnumerable <Vector3S> path = from.PathTo(to); if (sender.Group.MaxBlockChange < path.Count()) { sender.SendMessage("You are not allowed to change that many blocks"); return; } foreach (var pos in path) { if (!sender.Level.IsInBounds(pos)) { continue; } BlockQueue.Addblock(sender, (ushort)pos.x, (ushort)pos.y, (ushort)pos.z, block); } sender.SendMessage(string.Format("Changed {0} blocks in a line", path.Count())); } catch (Exception er) { sender.SendMessage("An Error occurred while trying to make a pretty line"); Logger.LogError(er); } }
void OnAllPlayersBlockChange_Normal(Player sender, BlockChangeEventArgs args) { Vector3S v = new Vector3S(args.X, args.Z, args.Y); if (store[sender.Level.Name].Contains(v)) { object msg = sender.Level.ExtraData["MessageBlock" + v]; if (msg != null && msg.GetType() == typeof(string) && ((string)msg).Length > 0) { if (((string)msg).StartsWith("c")) { if (removeCommandOnAir && (args.Action == ActionType.Delete || args.Holding == 0)) { Remove(sender.Level, v); } else if (protectBlockType) { args.Cancel(); } } else { if (removeMessageOnAir && (args.Action == ActionType.Delete || args.Holding == 0)) { Remove(sender.Level, v); } else if (protectBlockType) { args.Cancel(); } } } } }
public void CatchBlock2(Player sender, BlockChangeEventArgs args) { args.Unregister(); Vector3S FirstBlock = (Vector3S)sender.GetDatapass("CmdDatapassExample_FirstBlock"); Vector3S SecondBlock = new Vector3S(args.X, args.Z, args.Y); sender.SendMessage("This is where we would initiate a Cuboid!"); }
void HandleBlockChanged(object sender, BlockChangeEventArgs e) { // TODO: Propegate lighting changes to client (not possible with beta 1.7.3 protocol) if (e.NewBlock.ID != e.OldBlock.ID || e.NewBlock.Metadata != e.OldBlock.Metadata) { for (int i = 0, ClientsCount = Clients.Count; i < ClientsCount; i++) { var client = (RemoteClient)Clients[i]; // TODO: Confirm that the client knows of this block if (client.LoggedIn && client.World == sender) { client.QueuePacket(new BlockChangePacket(e.Position.X, (sbyte)e.Position.Y, e.Position.Z, (sbyte)e.NewBlock.ID, (sbyte)e.NewBlock.Metadata)); } } PendingBlockUpdates.Enqueue(new BlockUpdate { Coordinates = e.Position, World = sender as IWorld }); ProcessBlockUpdates(); if (Program.ServerConfiguration.EnableLighting) { var lighter = WorldLighters.SingleOrDefault(l => l.World == sender); if (lighter != null) { lighter.EnqueueOperation(new BoundingBox(e.Position, e.Position + Vector3.One), true); lighter.EnqueueOperation(new BoundingBox(e.Position, e.Position + Vector3.One), false); } } } }
//public void CatchBlock2(Player p, ushort x, ushort z, ushort y, byte NewType, bool placed, object DataPass) public void CatchBlock2(Player sender, BlockChangeEventArgs args) { args.Cancel(); args.Unregister(); sender.SendBlockChange(args.X, args.Z, args.Y, sender.Level.GetBlock(args.X, args.Z, args.Y)); CatchPos cpos = (CatchPos)sender.GetDatapass("CmdMeasure_cpos"); Vector3S FirstBlock = cpos.FirstBlock; ushort xx, zz, yy; int count = 0; for (xx = Math.Min((ushort)(FirstBlock.x), args.X); xx <= Math.Max((ushort)(FirstBlock.x), args.X); ++xx) { for (zz = Math.Min((ushort)(FirstBlock.z), args.Z); zz <= Math.Max((ushort)(FirstBlock.z), args.Z); ++zz) { for (yy = Math.Min((ushort)(FirstBlock.y), args.Y); yy <= Math.Max((ushort)(FirstBlock.y), args.Y); ++yy) { if (cpos.ignore == null || !cpos.ignore.Contains(sender.Level.GetBlock(xx, zz, yy))) { count++; } } } } sender.SendMessage(count + " blocks are between (" + FirstBlock.x + ", " + FirstBlock.z + ", " + FirstBlock.y + ") and (" + args.X + ", " + args.Z + ", " + args.Y + ")"); }
void add_Normal(Player sender, BlockChangeEventArgs args) { sender.OnPlayerBlockChange.Normal -= add_Normal; args.Cancel(); string message = (string)sender.GetDatapass("MessageBlockMessage"); add(sender.Level, args.X, args.Z, args.Y, message, sender); }
public void CatchBlock(Player sender, BlockChangeEventArgs args) { args.Unregister(); Vector3S FirstBlock = new Vector3S(args.X, args.Z, args.Y); sender.SendMessage("Please place another block..."); sender.SetDatapass("CmdDatapassExample_FirstBlock", FirstBlock); sender.OnPlayerBlockChange.Normal += new BlockChangeEvent.EventHandler(CatchBlock2); }
private void OnPlayerBlockChangeOnNormal2(Player sender, BlockChangeEventArgs args) { args.Unregister(); args.Cancel(); var data = (KeyValuePair <KeyValuePair <string, byte>, Vector3D>)sender.GetDatapass(Name); new Zone(data.Value, new Vector3D(args.X, args.Z, args.Y), sender, data.Key.Key, data.Key.Value); }
void BlockChange1(Player sender, BlockChangeEventArgs args) { CatchPos cpos = (CatchPos)sender.GetDatapass(Name); cpos.pos = new Vector3S((short)args.X, (short)args.Z, (short)args.Y); args.Cancel(); sender.OnPlayerBlockChange.Normal -= BlockChange1; sender.SetDatapass(Name, cpos); sender.OnPlayerBlockChange.Normal += BlockChange2; }
public void CatchBlock2(Player p, BlockChangeEventArgs args) { p.OnPlayerBlockChange.Normal -= new Event<Player, BlockChangeEventArgs>.EventHandler(CatchBlock2); CatchPos cpos = (CatchPos)p.GetDatapass(this.Name); cpos.pos2 = new Vector3S(args.X, args.Z, args.Y); args.Cancel(); Replace(cpos, p); }
public void CatchBlock1(Player p, BlockChangeEventArgs args) { CatchPos cpos = (CatchPos)p.GetDatapass(this.Name); cpos.pos = new Vector3S(args.X, args.Z, args.Y); args.Cancel(); p.OnPlayerBlockChange.Normal -= new Event<Player, BlockChangeEventArgs>.EventHandler(CatchBlock1); p.SetDatapass(this.Name, cpos); p.OnPlayerBlockChange.Normal += new BlockChangeEvent.EventHandler(CatchBlock2); }
public void BC1(Player p, BlockChangeEventArgs args) { p.ExtraData["Mark1"] = new Vector3S(args.X, args.Z, args.Y); p.SendMessage("First coordinate marked. (" + args.X + ", " + args.Z + ", " + args.Y + ")"); args.Unregister(); args.Cancel(); p.SendMessage("Break or place a block to select the second point."); p.OnPlayerBlockChange.Normal += new BlockChangeEvent.EventHandler(BC2); }
//public void CatchBlock(Player p, ushort x, ushort z, ushort y, byte NewType, bool placed, object DataPass) public void CatchBlock(Player sender, BlockChangeEventArgs args) { CatchPos cpos = (CatchPos)sender.GetDatapass("CmdReplaceNot_cpos"); cpos.pos = new Vector3S(args.X, args.Z, args.Y); args.Unregister(); sender.SetDatapass("CmdReplaceNot_cpos", cpos); sender.OnPlayerBlockChange.Normal += new BlockChangeEvent.EventHandler(CatchBlock2); //p.CatchNextBlockchange(CatchBlock2, (object)cpos); }
void CatchBlockOne(Player sender, BlockChangeEventArgs e) { BlockInfo block = (BlockInfo)sender.ExtraData.GetIfExist <object, object>("Command.Line"); sender.ExtraData.ChangeOrCreate <object, object>("Command.Line", new BlockInfo(block.Block != 255 ? block.Block : e.Holding, new Vector3S(e.X, e.Z, e.Y))); e.Cancel(); sender.OnPlayerBlockChange.Normal -= CatchBlockOne; sender.OnPlayerBlockChange.Normal += new Event <Player, BlockChangeEventArgs> .EventHandler(CatchBlockTwo); }
public void CatchBlock(Player sender, BlockChangeEventArgs args) { CatchPos cpos = (CatchPos)sender.GetDatapass("CmdReplace_cpos"); ; cpos.pos = new Vector3S(args.X, args.Y, args.Z); args.Unregister(); args.Cancel(); sender.SetDatapass("CmdReplace_cpos", cpos); sender.OnPlayerBlockChange.Normal += new BlockChangeEvent.EventHandler(CatchBlock2); }
//public void CatchBlock(Player p, ushort x, ushort z, ushort y, byte NewType, bool placed, object DataPass) public void CatchBlock(Player sender, BlockChangeEventArgs args) { args.Cancel(); args.Unregister(); sender.SendBlockChange(args.X, args.Z, args.Y, sender.Level.GetBlock(args.X, args.Z, args.Y)); CatchPos cpos = (CatchPos)sender.GetDatapass("CmdMeasure_cpos"); cpos.FirstBlock = new Vector3S(args.X, args.Z, args.Y); sender.SetDatapass("CmdMeasure_cpos", cpos); sender.OnPlayerBlockChange.Normal += new BlockChangeEvent.EventHandler(CatchBlock2); //p.CatchNextBlockchange(new Player.BlockChangeDelegate(CatchBlock2), (object)cpos); }
public void CatchBlock2(Player p, BlockChangeEventArgs args) { p.OnPlayerBlockChange.Normal -= new Event <Player, BlockChangeEventArgs> .EventHandler(CatchBlock2); CatchPos cpos = (CatchPos)p.GetDatapass(this.Name); cpos.pos2 = new Vector3S(args.X, args.Z, args.Y); args.Cancel(); Replace(cpos, p); }
private void OnPlayerBlockChangeOnNormal(Player sender, BlockChangeEventArgs args) { args.Unregister(); args.Cancel(); var data = (KeyValuePair <string, byte>)sender.GetDatapass(Name); sender.SetDatapass(Name, new KeyValuePair <KeyValuePair <string, byte>, Vector3D>(data, new Vector3D(args.X, args.Z, args.Y))); sender.SendMessage("Now, please place a 2nd block to finish defining the region"); sender.OnPlayerBlockChange.Normal += OnPlayerBlockChangeOnNormal2; }
void BlockChange2(Player sender, BlockChangeEventArgs args) { //string direction = null; sender.OnPlayerBlockChange.Normal -= BlockChange2; CatchPos cpos = (CatchPos)sender.GetDatapass(this.Name); foreach (Vector3S v in BlockString(cpos.message, cpos.pos, new Vector3S(args.X, args.Z, args.Y), sender.Level.Size)) { sender.Level.BlockChange(v, args.Holding, sender); } args.Cancel(); return; }
public void CatchBlock1(Player p, BlockChangeEventArgs args) { CatchPos cpos = new CatchPos(); cpos.pos = new Vector3S(args.X, args.Z, args.Y); args.Cancel(); p.OnPlayerBlockChange.Normal -= new Event <Player, BlockChangeEventArgs> .EventHandler(CatchBlock1); p.SetDatapass(this.Name, cpos); p.OnPlayerBlockChange.Normal += new BlockChangeEvent.EventHandler(CatchBlock2); }
public void OnBlockChange(Player p, BlockChangeEventArgs args) { if (args.Action == ActionType.Place) { LevelMap.AirMap[args.X, args.Z, args.Y] = false; } else if (args.Action == ActionType.Delete) { LevelMap.AirMap[args.X, args.Z, args.Y] = true; } }
public void CatchBlock2(Player p, BlockChangeEventArgs args) { p.OnPlayerBlockChange.Normal -= new Event <Player, BlockChangeEventArgs> .EventHandler(CatchBlock2); CatchPos cpos = (CatchPos)p.GetDatapass(this.Name); cpos.secondPos = new Vector3S(args.X, args.Z, args.Y); cpos.block = args.Holding; args.Cancel(); Cuboid(cpos, p); }
private void OnAllPlayersBlockChangeOnHigh(Player sender, BlockChangeEventArgs args) { var zones = Zone.FindAllWithin(new Vector3D(args.X, args.Z, args.Y)); foreach (var zone in zones) { if (zone.CanBuildIn(sender)) continue; sender.SendMessage("You cannot build in this Zone! This zone if for: " + (PlayerGroup.FindPermInt(zone.Permission) ?? ("Permission: " + zone.Permission)) + " or higher!"); args.Cancel(); return; } }
void BlockChange2(Player sender, BlockChangeEventArgs args) { //string direction = null; sender.OnPlayerBlockChange.Normal -= BlockChange2; CatchPos cpos = (CatchPos)sender.GetDatapass(this.Name); foreach (Vector3S v in BlockString(cpos.message, cpos.pos, new Vector3S(args.X, args.Z, args.Y), sender.Level.CWMap.Size)) { BlockQueue.Addblock(sender, (ushort)v.x, (ushort)v.y, (ushort)v.z, args.Holding); } args.Cancel(); return; }
public void BC2(Player p, BlockChangeEventArgs args) { Vector3S _s = new Vector3S(); p.ExtraData["Mark2"] = new Vector3S(args.X, args.Z, args.Y); p.SendMessage("Second coordinate marked. (" + args.X + ", " + args.Z + ", " + args.Y + ")"); args.Unregister(); args.Cancel(); Vector3S m1 = (Vector3S)p.ExtraData["Mark1"]; Vector3S m2 = (Vector3S)p.ExtraData["Mark2"]; p.SendMessage("Marked coordinates:"); p.SendMessage("(" + m1.x + ", " + m1.z + ", " + m1.y + "), (" + m2.x + ", " + m2.z + ", " + m2.y + ")"); p.ExtraData["HasMarked"] = true; }
private void OnAllPlayersBlockChangeOnHigh(Player sender, BlockChangeEventArgs args) { var zones = Zone.FindAllWithin(new Vector3D(args.X, args.Z, args.Y)); foreach (var zone in zones) { if (zone.CanBuildIn(sender)) { continue; } sender.SendMessage("You cannot build in this Zone! This zone if for: " + (PlayerGroup.FindPermInt(zone.Permission) ?? ("Permission: " + zone.Permission)) + " or higher!"); args.Cancel(); return; } }
private void WorldBlockChange(object sender, BlockChangeEventArgs e) { var world = sender as World; var chunk = world.FindChunk(e.Coordinates); var chunkCoordinates = new Coordinates2D(chunk.X, chunk.Z); var block = world.GetBlockInfo(e.Coordinates); //Block.DoBlockUpdates(world, e.Coordinates); foreach (var client in GetClientsInWorld(world)) { if (client.LoadedChunks.Contains(chunkCoordinates)) { client.SendPacket(new BlockChangePacket(e.Coordinates.X, (byte)e.Coordinates.Y, e.Coordinates.Z, block.BlockId, block.Metadata)); } } }
void HandleBlockChanged(object sender, BlockChangeEventArgs e) { for (int i = 0, ClientsCount = Clients.Count; i < ClientsCount; i++) { var client = (RemoteClient)Clients[i]; // TODO: Confirm that the client knows of this block if (client.LoggedIn && client.World == sender) { client.QueuePacket(new BlockChangePacket(e.Position.X, (sbyte)e.Position.Y, e.Position.Z, (sbyte)e.NewBlock.ID, (sbyte)e.NewBlock.Metadata)); } } PendingBlockUpdates.Enqueue(new BlockUpdate { Coordinates = e.Position, World = sender as IWorld }); ProcessBlockUpdates(); }
//public void CatchBlock2(Player p, ushort x, ushort z, ushort y, byte NewType, bool placed, object DataPass) public void CatchBlock2(Player sender, BlockChangeEventArgs args) { args.Cancel(); args.Unregister(); sender.SendBlockChange(args.X, args.Z, args.Y, sender.Level.GetBlock(args.X, args.Z, args.Y)); CatchPos cpos = (CatchPos)sender.GetDatapass("CmdMeasure_cpos"); Vector3S FirstBlock = cpos.FirstBlock; ushort xx, zz, yy; int count = 0; for (xx = Math.Min((ushort)(FirstBlock.x), args.X); xx <= Math.Max((ushort)(FirstBlock.x), args.X); ++xx) for (zz = Math.Min((ushort)(FirstBlock.z), args.Z); zz <= Math.Max((ushort)(FirstBlock.z), args.Z); ++zz) for (yy = Math.Min((ushort)(FirstBlock.y), args.Y); yy <= Math.Max((ushort)(FirstBlock.y), args.Y); ++yy) { if (cpos.ignore == null || !cpos.ignore.Contains(sender.Level.GetBlock(xx, zz, yy))) { count++; } } sender.SendMessage(count + " blocks are between (" + FirstBlock.x + ", " + FirstBlock.z + ", " + FirstBlock.y + ") and (" + args.X + ", " + args.Z + ", " + args.Y + ")"); }
public void OnAllPlayersBlockChange(Player sender, BlockChangeEventArgs evt) { byte perBuild = 0; try { perBuild = (byte)sender.Level.Settings.perbuild; } catch { } if (sender.Group.Permission < perBuild) { sender.SendMessage("You cannot build here"); evt.Cancel(); } }
public void OnAllPlayersBlockChange_Normal(Player sender, BlockChangeEventArgs evt) { byte perBuildMax = byte.MaxValue; if (sender.Level.ExtraData.ContainsKey("perbuildmax")) { try { perBuildMax = (byte)sender.Level.ExtraData["perbuildmax"]; } catch { perBuildMax = byte.MaxValue; } } if (sender.Group.Permission > perBuildMax) { sender.SendMessage("You cannot build here"); evt.Cancel(); } }
void OnPlayerBlockChange_Normal(Player sender, BlockChangeEventArgs args) { args.Cancel(); if (args.Current == 0 && args.Action == ActionType.Delete) args.Current = 20; sender.OnPlayerBlockChange.Normal -= OnPlayerBlockChange_Normal; if (sender.ExtraData["Cursor"] != null) { Vector3S cursor; if (sender.ExtraData["Cursor"].GetType() == typeof(Vector3S)) cursor = (Vector3S)sender.ExtraData["Cursor"]; else { cursor = new Vector3S(); cursor.FromString((string)sender.ExtraData["Cursor"]); } if (args.Action == ActionType.Place) { sender.Click((ushort)cursor.x, (ushort)cursor.z, (ushort)(cursor.y + 1), args.Holding); } else { sender.Click((ushort)cursor.x, (ushort)cursor.z, (ushort)(cursor.y), args.Holding, false); } } sender.OnPlayerBlockChange.Normal += OnPlayerBlockChange_Normal; Curse(sender); }
public void CatchBlock2(Player sender, BlockChangeEventArgs args) { CatchPos FirstBlock = (CatchPos)sender.GetDatapass("CmdReplaceNot_cpos"); List<Pos> buffer = new List<Pos>(); for (ushort xx = Math.Min((ushort)(FirstBlock.pos.x), args.X); xx <= Math.Max((ushort)(FirstBlock.pos.x), args.X); ++xx) { for (ushort zz = Math.Min((ushort)(FirstBlock.pos.z), args.Z); zz <= Math.Max((ushort)(FirstBlock.pos.z), args.Z); ++zz) { for (ushort yy = Math.Min((ushort)(FirstBlock.pos.y), args.Y); yy <= Math.Max((ushort)(FirstBlock.pos.y), args.Y); ++yy) { Vector3S loop = new Vector3S(xx, zz, yy); if (sender.Level.GetBlock(loop) != FirstBlock.type) { BufferAdd(buffer, loop); } } } } //Group Max Blocks permissions here sender.SendMessage(buffer.Count.ToString() + " blocks."); //Level Blockqueue .-. buffer.ForEach(delegate(Pos pos) { sender.Level.BlockChange((ushort)(pos.pos.x), (ushort)(pos.pos.z), (ushort)(pos.pos.y), FirstBlock.type2); }); }
public void CatchBlock2(Player p, BlockChangeEventArgs args) { p.OnPlayerBlockChange.Normal -= new Event<Player, BlockChangeEventArgs>.EventHandler(CatchBlock2); CatchPos cpos = (CatchPos)p.GetDatapass(this.Name); cpos.secondPos = new Vector3S(args.X, args.Z, args.Y); cpos.block = args.Holding; args.Cancel(); Cuboid(cpos, p); }
void OnAllPlayersBlockChange_Normal(Player sender, BlockChangeEventArgs args) { string username = Helper.GetOwner(new Vector3S(args.X, args.Z, args.Y), sender.Level.Name); if (username == null) //no owner, ADD ALL THE BLOCKS return; if ((AllowList.Count == 0 && username != sender.Username) || (AllowList.ContainsKey(username) && !AllowList[username].Contains(sender) && sender.Group.Permission > (byte)PermissionLevel.Operator && args.Action != ActionType.Place)) { sender.SendMessage("U silly head, you didnt make this. Ask " + username + " to add you to list"); args.Cancel(); } if (!hasPlayerInfo(sender)) { players.Add(new PlayerInfo(sender)); return; } PlayerInfo pi = getPlayerInfo(sender); if (pi.LastBlock == args.Holding && args.Action == ActionType.Place) { if (pi.LastPlace.AddMilliseconds(1000) > DateTime.Now) pi.offense++; else pi.offense--; if (getPlayerInfo(sender).kicked) args.Cancel(); } }
private void OnPlayerBlockChangeOnNormal(Player sender, BlockChangeEventArgs args) { var b = (Block) sender.ExtraData["BlockMode"]; if (args.Action == ActionType.Delete) return; args.Holding = b; var physicsBlock = b as PhysicsBlock; if (physicsBlock == null) return; sender.Level.pblocks.Add(physicsBlock); }
public void CatchBlock2(Player p, BlockChangeEventArgs args) { p.OnPlayerBlockChange.Normal -= new Event<Player, BlockChangeEventArgs>.EventHandler(CatchBlock2); CatchPos cpos = (CatchPos)p.GetDatapass(this.Name); Cuboid(cpos, args.Holding, p, args.X, args.Y, args.Z); args.Cancel(); }
void BlockChange(Player sender, BlockChangeEventArgs e) { e.Cancel(); var raw = (BrushData)sender.ExtraData.GetIfExist<object, object> ("BrushData"); if(raw == null){ sender.SendMessage("An error occurred while trying to brush"); sender.OnPlayerBlockChange.Normal -= BlockChange; return; } byte block = raw.Block != 255 ? raw.Block : e.Holding; Vector3S loc = new Vector3S(e.X, e.Z, e.Y); IBrush b = (IBrush)Activator.CreateInstance(raw.BrushType); var qq = b.Draw(loc, raw.Block, raw.Size); if (sender.Group.MaxBlockChange < qq.Count()) { sender.SendMessage("You cannot set that many blocks"); return; } foreach (var fml in qq) sender.SendBlockChange((ushort)fml.x, (ushort)fml.z, (ushort)fml.y, block); #if DEBUG sender.SendMessage(string.Format("Brushed {0} blocks", qq.Count())); #endif }
private void HandleBlockchange(ushort x, ushort y, ushort z, byte action, byte newType, bool fake) { LastClick = new Vector3S(x, y, z); if (newType > 49 || (newType == 7 && !IsAdmin)) { Kick("HACKED CLIENT!"); //TODO Send message to op's for adminium hack return; } byte currentType = 50; if (y < Level.Size.y) { currentType = Level.GetBlock(x, z, y); if (!Block.IsValidBlock(currentType) && currentType != 255) { Kick("HACKED SERVER!"); return; } } else { return; } bool placing = (action == 1); BlockChangeEventArgs eargs = new BlockChangeEventArgs(x, z, y, (placing ? ActionType.Place : ActionType.Delete), newType, Level.GetBlock(x, z, y)); eargs = OnPlayerBlockChange.Call(this, eargs, OnAllPlayersBlockChange); if (eargs.Canceled) { if (!fake) SendBlockChange(x, z, y, Level.GetBlock(eargs.X, eargs.Z, eargs.Y)); return; } x = eargs.X; z = eargs.Z; y = eargs.Y; action = (byte)((eargs.Action == ActionType.Place) ? 1 : 0); placing = action == 1; newType = eargs.Holding; currentType = eargs.Current; if (blockChange != null) { if (fake) SendBlockChange(x, z, y, currentType); BlockChangeDelegate tempBlockChange = blockChange; if (!ExtraData.ContainsKey("PassBackData")) ExtraData.Add("PassBackData", null); object tempPassBack = ExtraData["PassBackData"]; blockChange = null; ExtraData["PassBackData"] = null; ThreadPool.QueueUserWorkItem(delegate { tempBlockChange.Invoke(this, x, z, y, newType, placing, tempPassBack); }); return; } if (action == 0) //Deleting { Level.BlockChange(x, z, y, 0, this); } else //Placing { Level.BlockChange(x, z, y, newType, this); } //BlockChanges.Add(new World.Blocks.BlockChange(new Vector3S(x, z, y), blockFrom, newType, action == 0)); }
public void OnBlockChange(Player Player, BlockChangeEventArgs args) { ExtraPlayerData p = FindPlayer(Player); #region Block Placing Limit if (p.AmountOfBlocksLeft <= 0 && ZombieRoundEnabled && args.Action == ActionType.Place) { Player.SendMessage("[Zombie Survival]: " + Colors.red + "You don't have any more blocks! You can buy more at the /store!"); args.Cancel(); return; } if (ZombieRoundEnabled && args.Action == ActionType.Place && !p.Referee) p.AmountOfBlocksLeft -= 1; if ((p.AmountOfBlocksLeft % 10 == 0 || p.AmountOfBlocksLeft < 6) && ZombieRoundEnabled && args.Action == ActionType.Place && !p.Referee) p.Player.SendMessage("[Zombie Survival]: " + Colors.red + "You have " + p.AmountOfBlocksLeft + " blocks left!"); #endregion #region Anti-spleef/bedrock if (args.Action == ActionType.Delete && Player.Level.GetBlock(args.X, args.Z, args.Y) == Block.BlockList.BEDROCK && !p.Referee) { p.Player.SendMessage("[Zombie Survival]: " + Colors.red + "You cannot break this >:("); if (p.TheTypeOfNotification != 1) WOM.GlobalSendAlert(Player.Username + " tried to break bedrock (Hacking?)"); p.TheTypeOfNotification = 1; args.Cancel(); return; } if (args.Action == ActionType.Delete && !p.Referee) { foreach (Player z in Server.Players.ToArray()) { if (new Vector3S(args.X, args.Z, (ushort)(args.Y + 2)) == (z.Pos / 32) && !z.IsHidden && z != Player) { p.Player.SendMessage("[Zombie Survival]: " + Colors.red + "You cannot spleef another player >:("); if (p.TheTypeOfNotification != 2) WOM.GlobalSendAlert(Player.Username + " spleefed " + z.Username); p.TheTypeOfNotification = 2; args.Cancel(); return; } } } #endregion #region Anti-pillaring if (args.Y - p.LastYValue == 1 && !p.Referee) { p.AmountOfPillars += 1; if (p.AmountOfPillars > 7) { p.Player.Kick("You are not allowed to pillar on this server!"); } } else { if (p.AmountOfPillars > 0) { p.AmountOfPillars -= 1; } } p.LastYValue = args.Y; #endregion }
void remove_Normal(Player sender, BlockChangeEventArgs args) { sender.OnPlayerBlockChange.Normal -= remove_Normal; args.Cancel(); Vector3S v = new Vector3S(args.X, args.Z, args.Y); PluginMessageBlock pmb = (PluginMessageBlock)Plugin.getByType(typeof(PluginMessageBlock).Name); if (pmb == null) { sender.SendMessage(typeof(PluginMessageBlock).Name + " is currently not loaded"); return; } if (pmb.Remove(sender.Level, v)) { sender.SendMessage("Message block removed"); } else { sender.SendMessage("There was already no message set for this block"); } }