package engine.net.client.handlers; import engine.Enum; import engine.exception.MsgSendException; import engine.gameManager.BuildingManager; import engine.gameManager.CombatManager; import engine.net.client.ClientConnection; import engine.net.client.msg.AttackCmdMsg; import engine.net.client.msg.ClientNetMsg; import engine.net.client.msg.TargetedActionMsg; import engine.objects.AbstractWorldObject; import engine.objects.Building; import engine.objects.Mob; import engine.objects.PlayerCharacter; import org.pmw.tinylog.Logger; /* * @Author: * @Summary: Processes application protocol message which keeps * client's tcp connection open. */ public class AttackCmdMsgHandler extends AbstractClientMsgHandler { public AttackCmdMsgHandler() { super(AttackCmdMsg.class); } @Override protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException { PlayerCharacter playerCharacter = origin.getPlayerCharacter(); // Member variable declaration AttackCmdMsg msg; // Member variable assignment msg = (AttackCmdMsg) baseMsg; if (TargetedActionMsg.un2cnt == 60 || TargetedActionMsg.un2cnt == 70) return true; if (playerCharacter == null) return true; AbstractWorldObject target; if(msg.getTargetType() == Enum.GameObjectType.Mob.ordinal()){ target = Mob.getMob(msg.getTargetID()); } else if(msg.getTargetType() == Enum.GameObjectType.Building.ordinal()){ target = BuildingManager.getBuilding(msg.getTargetID()); Building targetBuilding = (Building) target; if(!targetBuilding.isVulnerable() || targetBuilding.getRank() < 0) { playerCharacter.setCombatTarget(null); return true; } } else if(msg.getTargetType() == Enum.GameObjectType.PlayerCharacter.ordinal()){ target = PlayerCharacter.getPlayerCharacter(msg.getTargetID()); } else{ playerCharacter.setCombatTarget(null); return true; //cannot attack other things } if(target == null) { playerCharacter.setCombatTarget(null); return true; // cannot attack a null target } //set sources target playerCharacter.setCombatTarget(target); //put in combat if not already if (!playerCharacter.isCombat()) CombatManager.toggleCombat(true, origin); //make character stand if sitting if (playerCharacter.isSit()) CombatManager.toggleSit(false, origin); CombatManager.AttackTarget(playerCharacter, target); return true; } }