public static void ExplodeTNT(Player p, ushort x, ushort y, ushort z, int radius) { Player.players.ForEach(delegate(Player pl) { if (pl == p || !p.placedTNT.isActive || !CTF.gameOn || pl.team == p.team) { return; } currLevel.Blockchange(x, y, z, Block.air); p.placedTNT.isActive = false; ushort px = (ushort)(pl.pos[0] / 32); ushort py = (ushort)(pl.pos[1] / 32); ushort pz = (ushort)(pl.pos[2] / 32); if ((Math.Max(px, x) - Math.Min(px, x)) <= radius) { if ((Math.Max(py, y) - Math.Min(py, y)) <= radius) { if ((Math.Max(pz, z) - Math.Min(pz, z)) <= radius) { Player.GlobalMessage("&f- " + pl.color + pl.name + "&S was exploded by " + p.color + p.name + "&S's TNT!"); p.killPlayer(pl); Server.s.Log(p.name + " exploded " + pl.name + "!"); } } } ushort minX = (ushort)(x - radius); ushort minY = (ushort)(y - radius); ushort minZ = (ushort)(z - radius); ushort maxX = (ushort)(x + radius); ushort maxY = (ushort)(y + radius); ushort maxZ = (ushort)(z + radius); for (ushort xx = minX; xx <= maxX; xx++) { for (ushort yy = minY; yy <= maxY; yy++) { for (ushort zz = minZ; zz <= maxZ; zz++) { if (currLevel.GetTile(xx, yy, zz) != Block.blackrock && tntDestroyBlocks) { currLevel.Blockchange(xx, yy, zz, Block.air); Player.GlobalBlockchange(currLevel, xx, yy, zz, Block.air); } } } } }); }