Exemplo n.º 1
0
        private void OnMoveResp(byte[] data)
        {
            //封包接收移動的位置與面向的方向
            GameMapMoveRespPayload.ParsePayload(data, out var ackCode, out var posX, out var posY, out var playerFace);

            if (ackCode != GameMapAck.Success)
            {
                Program.mainUI.OnShowSystemLog($"移動錯誤,錯誤代碼:{ackCode}");
                Program.mainUI.OnControlPlayerAction(true);
            }

            Program.PlayerDataInfo.PosX       = posX;
            Program.PlayerDataInfo.PosY       = posY;
            Program.PlayerDataInfo.PlayeyFace = playerFace;
            Program.mainUI.OnShowPlayerData(Program.PlayerDataInfo);
            Program.mainUI.OnControlPlayerAction(true);
        }
Exemplo n.º 2
0
        public void GameMapMoveReq(Player player, byte[] byteArray)
        {
            GameMapMoveReqPayload.ParsePayload(byteArray, out var moveAction);

            var ackCode = GameMapAck.Success;

            if (!GameMapsDict.TryGetValue(player.PlayerData.MapSeed, out var gameMap))
            {
                Console.WriteLine("不存在的地圖");
                ackCode = GameMapAck.NoExistMapSeed;
            }

            //檢查面向,依照面向的位置往前後左右移動,然後再計算有沒有超界
            if (!isBorder(gameMap, player, moveAction))
            {
                Console.WriteLine("超越地圖邊界、不存在的動作");
                ackCode = GameMapAck.OverBorder;
            }

            var payload = GameMapMoveRespPayload.CreatePayload(ackCode, player.PlayerData.PosX, player.PlayerData.PosY, player.PlayerData.PlayeyFace);

            Send(player, PacketBuilder.BuildPacket((int)SystemCategory.GameMapSystem, (int)GameMapCommand.MoveResp, payload));
        }