예제 #1
0
        void Blockchange1(Player p, int x, int y, int z, short type)
        {
            p.ClearBlockChange();
            //p.SendMessage("tile: " + x + " " + y + " " + z + " " + type);
            p.SendBlockChange(x, (byte)y, z, p.level.GetBlock(x, y, z), p.level.GetMeta(x, y, z));
            CuboidData cd = (CuboidData)p.BlockChangeObject;

            cd.x = x; cd.y = y; cd.z = z;
            p.BlockChangeObject = cd;
            p.OnBlockChange    += Blockchange2;
        }
예제 #2
0
        void Blockchange2(Player p, int x, int y, int z, short type)
        {
            p.ClearBlockChange();
            //p.SendMessage("tile: " + x + " " + y + " " + z + " " + type);
            p.SendBlockChange(x, (byte)y, z, p.level.GetBlock(x, y, z), p.level.GetMeta(x, y, z));
            CuboidData cd   = (CuboidData)p.BlockChangeObject;
            byte       meta = (byte)p.inventory.current_item.meta;

            if (cd.type != -1)
            {
                type = cd.type;
            }
            if (!FindBlocks.ValidBlock(type))
            {
                type = 0;
            }

            int sx = Math.Min(cd.x, x);
            int ex = Math.Max(cd.x, x);
            int sy = Math.Min(cd.y, y);
            int ey = Math.Max(cd.y, y);
            int sz = Math.Min(cd.z, z);
            int ez = Math.Max(cd.z, z);

            int total = 0;

            p.SendMessage("Cuboiding...");
            switch (cd.mode)
            {
            case CuboidType.Solid:
                for (int xx = sx; xx <= ex; xx++)
                {
                    for (int yy = sy; yy <= ey; yy++)
                    {
                        for (int zz = sz; zz <= ez; zz++)
                        {
                            p.level.BlockChange(xx, yy, zz, (byte)type, meta, false);
                            total++;
                        }
                    }
                }
                break;

            case CuboidType.Hollow:
                for (int xx = sx; xx <= ex; xx++)
                {
                    for (int zz = sz; zz <= ez; zz++)
                    {
                        p.level.BlockChange(xx, sy, zz, (byte)type, meta, false);
                        p.level.BlockChange(xx, ey, zz, (byte)type, meta, false);
                        total += 2;
                    }
                }
                for (int yy = sy; yy <= ey; yy++)
                {
                    for (int xx = sx; xx <= ex; xx++)
                    {
                        p.level.BlockChange(xx, yy, sz, (byte)type, meta, false);
                        p.level.BlockChange(xx, yy, ez, (byte)type, meta, false);
                        total += 2;
                    }
                    for (int zz = sz; zz <= ez; zz++)
                    {
                        p.level.BlockChange(sx, yy, zz, (byte)type, meta, false);
                        p.level.BlockChange(ex, yy, zz, (byte)type, meta, false);
                        total += 2;
                    }
                }
                break;

            case CuboidType.Walls:
                for (int yy = sy; yy <= ey; yy++)
                {
                    for (int xx = sx; xx <= ex; xx++)
                    {
                        p.level.BlockChange(xx, yy, sz, (byte)type, meta, false);
                        p.level.BlockChange(xx, yy, ez, (byte)type, meta, false);
                        total += 2;
                    }
                    for (int zz = sz; zz <= ez; zz++)
                    {
                        p.level.BlockChange(sx, yy, zz, (byte)type, meta, false);
                        p.level.BlockChange(ex, yy, zz, (byte)type, meta, false);
                        total += 2;
                    }
                }
                break;

            case CuboidType.Holes:
                bool Checked = true, startZ, startY;
                for (int xx = sx; xx <= ex; xx++)
                {
                    startY = Checked;
                    for (int yy = sy; yy <= ey; yy++)
                    {
                        startZ = Checked;
                        for (int zz = sz; zz <= ez; zz++)
                        {
                            Checked = !Checked;
                            if (Checked)
                            {
                                p.level.BlockChange(xx, yy, zz, (byte)type, meta, false); total++;
                            }
                        }
                        Checked = !startZ;
                    }
                    Checked = !startY;
                }
                break;

            case CuboidType.Wire:
                for (int xx = sx; xx <= ex; xx++)
                {
                    p.level.BlockChange(xx, sy, sz, (byte)type, meta, false);
                    p.level.BlockChange(xx, sy, ez, (byte)type, meta, false);
                    p.level.BlockChange(xx, ey, sz, (byte)type, meta, false);
                    p.level.BlockChange(xx, ey, ez, (byte)type, meta, false);
                    total += 4;
                }
                for (int yy = sy; yy <= ey; yy++)
                {
                    p.level.BlockChange(sx, yy, sz, (byte)type, meta, false);
                    p.level.BlockChange(sx, yy, ez, (byte)type, meta, false);
                    p.level.BlockChange(ex, yy, sz, (byte)type, meta, false);
                    p.level.BlockChange(ex, yy, ez, (byte)type, meta, false);
                    total += 4;
                }
                for (int zz = sz; zz <= ez; zz++)
                {
                    p.level.BlockChange(sx, sy, zz, (byte)type, meta, false);
                    p.level.BlockChange(sx, ey, zz, (byte)type, meta, false);
                    p.level.BlockChange(ex, sy, zz, (byte)type, meta, false);
                    p.level.BlockChange(ex, ey, zz, (byte)type, meta, false);
                    total += 4;
                }
                break;

            case CuboidType.Random:
                Random rand = new Random();
                for (int xx = sx; xx <= ex; xx++)
                {
                    for (int yy = sy; yy <= ey; yy++)
                    {
                        for (int zz = sz; zz <= ez; zz++)
                        {
                            if (rand.Next(1, 11) <= 5)
                            {
                                p.level.BlockChange(xx, yy, zz, (byte)type, meta, false);
                                total++;
                            }
                        }
                    }
                }
                break;
            }
            p.SendMessage(total + " blocks.");
        }