Esempio n. 1
0
        private static bool HandleLiquidSet(GetDataHandlerArgs args)
        {
            int tileX = args.Data.ReadInt16();
            int tileY = args.Data.ReadInt16();

            if (PlotMarker.BlockModify(args.Player, tileX, tileY))
            {
                args.Player.SendTileSquare(tileX, tileY, 4);
                return(true);
            }

            return(false);
        }
Esempio n. 2
0
        private static bool HandleTile(GetDataHandlerArgs args)
        {
            var info = PlayerInfo.GetInfo(args.Player);

            using (var reader = new BinaryReader(args.Data))
            {
                reader.ReadByte();
                int x = reader.ReadInt16();
                int y = reader.ReadInt16();

                if (info.Status != PlayerInfo.PointStatus.None)
                {
                    if (x >= 0 && y >= 0 && x < Main.maxTilesX && y < Main.maxTilesY)
                    {
                        switch (info.Status)
                        {
                        case PlayerInfo.PointStatus.Point1:
                            info.X = x;
                            info.Y = y;
                            args.Player.SendInfoMessage("设定点 1 完毕.");
                            break;

                        case PlayerInfo.PointStatus.Point2:
                            info.X2 = x;
                            info.Y2 = y;
                            args.Player.SendInfoMessage("设定点 2 完毕.");
                            break;

                        case PlayerInfo.PointStatus.Delegate:
                            info.OnGetPoint?.Invoke(x, y, args.Player);
                            break;
                        }
                        info.Status = PlayerInfo.PointStatus.None;
                        args.Player.SendTileSquare(x, y, 3);
                        return(true);
                    }
                }

                if (PlotMarker.BlockModify(args.Player, x, y))
                {
                    args.Player.SendTileSquare(x, y, 3);
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 3
0
        private static bool HandleSendTileSquare(GetDataHandlerArgs args)
        {
            var player = args.Player;
            var size   = args.Data.ReadInt16();
            var tileX  = args.Data.ReadInt16();
            var tileY  = args.Data.ReadInt16();

            var tiles = new NetTile[size, size];

            for (int x = 0; x < size; x++)
            {
                for (int y = 0; y < size; y++)
                {
                    tiles[x, y] = new NetTile(args.Data);
                }
            }

            for (int x = 0; x < size; x++)
            {
                int realx = tileX + x;
                if (realx < 0 || realx >= Main.maxTilesX)
                {
                    continue;
                }

                for (int y = 0; y < size; y++)
                {
                    int realy = tileY + y;
                    if (realy < 0 || realy >= Main.maxTilesY)
                    {
                        continue;
                    }

                    if (tiles[x, y].Type == Terraria.ID.TileID.LogicSensor && PlotMarker.BlockModify(args.Player, realx, realy))
                    {
                        args.Player.SendTileSquare(realx, realy, 1);
                        return(true);
                    }
                }
            }

            return(false);
        }
Esempio n. 4
0
        private static bool HandlePaintWall(GetDataHandlerArgs args)
        {
            var x = args.Data.ReadInt16();
            var y = args.Data.ReadInt16();
            var t = args.Data.ReadInt8();

            if (x < 0 || y < 0 || x >= Main.maxTilesX || y >= Main.maxTilesY || t > Main.numTileColors)
            {
                return(true);
            }

            if (PlotMarker.BlockModify(args.Player, x, y))
            {
                args.Player.SendData(PacketTypes.PaintWall, "", x, y, Main.tile[x, y].wallColor());
                return(true);
            }

            return(false);
        }
Esempio n. 5
0
        private static bool HandlePlaceObject(GetDataHandlerArgs args)
        {
            var x     = args.Data.ReadInt16();
            var y     = args.Data.ReadInt16();
            var type  = args.Data.ReadInt16();
            var style = args.Data.ReadInt16();

            if (type < 0 || type >= Main.maxTileSets)
            {
                return(true);
            }

            if (x < 0 || x >= Main.maxTilesX)
            {
                return(true);
            }

            if (y < 0 || y >= Main.maxTilesY)
            {
                return(true);
            }

            var tileData = TileObjectData.GetTileData(type, style);

            for (int i = x; i < x + tileData.Width; i++)
            {
                for (int j = y; j < y + tileData.Height; j++)
                {
                    if (PlotMarker.BlockModify(args.Player, x, y))
                    {
                        args.Player.SendTileSquare(i, j, 4);
                        return(true);
                    }
                }
            }

            return(false);
        }
Esempio n. 6
0
        private static bool HandlePlaceTileEntity(GetDataHandlerArgs args)
        {
            var x    = args.Data.ReadInt16();
            var y    = args.Data.ReadInt16();
            var type = args.Data.ReadByte();

            if (x < 0 || x >= Main.maxTilesX)
            {
                return(true);
            }

            if (y < 0 || y >= Main.maxTilesY)
            {
                return(true);
            }

            if (PlotMarker.BlockModify(args.Player, x, y))
            {
                args.Player.SendTileSquare(x, y, 3);
                return(true);
            }

            return(false);
        }
Esempio n. 7
0
        private static bool HandleMassWireOperation(GetDataHandlerArgs args)
        {
            var startX = args.Data.ReadInt16();
            var startY = args.Data.ReadInt16();
            var endX   = args.Data.ReadInt16();
            var endY   = args.Data.ReadInt16();

            args.Data.ReadByte();             // Ignore toolmode

            var data = PlayerInfo.GetInfo(args.Player);

            if (data.Status != PlayerInfo.PointStatus.None)
            {
                if (startX >= 0 && startY >= 0 && endX >= 0 && endY >= 0 && startX < Main.maxTilesX && startY < Main.maxTilesY && endX < Main.maxTilesX && endY < Main.maxTilesY)
                {
                    if (startX == endX && startY == endY)
                    {
                        switch (data.Status)
                        {
                        case PlayerInfo.PointStatus.Point1:
                            data.X = startX;
                            data.Y = startY;
                            args.Player.SendInfoMessage("设定点 1 完毕.");
                            break;

                        case PlayerInfo.PointStatus.Point2:
                            data.X2 = startX;
                            data.Y2 = startY;
                            args.Player.SendInfoMessage("设定点 2 完毕.");
                            break;

                        case PlayerInfo.PointStatus.Delegate:
                            data.OnGetPoint?.Invoke(startX, startY, args.Player);
                            break;
                        }
                    }
                    else
                    {
                        switch (data.Status)
                        {
                        case PlayerInfo.PointStatus.Point1:
                        case PlayerInfo.PointStatus.Point2:
                            data.X  = startX;
                            data.Y  = startY;
                            data.X2 = endX;
                            data.Y2 = endY;
                            args.Player.SendInfoMessage("设定区域完毕.");
                            break;

                        case PlayerInfo.PointStatus.Delegate:
                            data.OnGetPoint?.Invoke(startX, startY, args.Player);
                            break;
                        }
                    }
                    data.Status = PlayerInfo.PointStatus.None;
                    return(true);
                }
            }

            var points = TShock.Utils.GetMassWireOperationRange(
                new Point(startX, startY),
                new Point(endX, endY),
                args.Player.TPlayer.direction == 1
                );

            return(points.Any(p => PlotMarker.BlockModify(args.Player, p.X, p.Y)));
        }