private void HandleActionMessage(String address, AbstractMessage message) { Player currentPlayer = controller.GetPlayer(IPAddress.Parse(address)); BattleEngine battleEngine = BattleEngine.GetInstance(); ActionMessage actionMessage = (ActionMessage)message; UpdateMessage updateMesssage = new UpdateMessage(); // Valide o jogador: Caso não seja o turno do jogador, descarte a mensagem if (currentPlayer.Name != battleEngine.ActualPlayer) { return; } actionMessage.PlayerName = currentPlayer.Name; if (actionMessage is ActionMessageFinish) { ActionMessageFinish finishMessage = (ActionMessageFinish)actionMessage; battleEngine.LastAction = LastAction.Passed; } else if (actionMessage is ActionMessageWalk) { ActionMessageWalk walkMessage = (ActionMessageWalk)actionMessage; walkMessage.Actor = battleEngine.ActualCharacter.RootName; battleEngine.ActualCharacterHasWalked = true; battleEngine.LastAction = LastAction.Walked; } else if (actionMessage is ActionMessageAttack) { ActionMessageAttack attackMessage = (ActionMessageAttack)actionMessage; attackMessage.Actor = battleEngine.ActualCharacter.RootName; AttackEvent attackEvent = battleEngine.ProcessAttack(attackMessage.TargetPlayer, attackMessage.Target); attackMessage.Damage = attackEvent.Damage; attackMessage.CounterAttack = attackEvent.CounterAttack; attackMessage.CounterDamage = attackEvent.CounterDamage; battleEngine.LastAction = LastAction.Attacked; } actionMessage.PlayerName = currentPlayer.Name; updateMesssage.Action = actionMessage; controller.Server.SendToAll(updateMesssage); foreach (Player player in controller.GetPlayers()) { player.Ready = false; } }