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); }
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)); }