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.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; int targetType; AbstractWorldObject target; if (TargetedActionMsg.un2cnt == 60 || TargetedActionMsg.un2cnt == 70) return true; if (playerCharacter == null) return true; //source must match player this account belongs to if (playerCharacter.getObjectUUID() != msg.getSourceID() || playerCharacter.getObjectType().ordinal() != msg.getSourceType()) { Logger.error("Msg Source ID " + msg.getSourceID() + " Does not Match Player ID " + playerCharacter.getObjectUUID()); return true; } targetType = msg.getTargetType(); if (targetType == Enum.GameObjectType.PlayerCharacter.ordinal()) { target = PlayerCharacter.getFromCache(msg.getTargetID()); } else if (targetType == Enum.GameObjectType.Building.ordinal()) { target = BuildingManager.getBuildingFromCache(msg.getTargetID()); } else if (targetType == Enum.GameObjectType.Mob.ordinal()) { target = Mob.getFromCache(msg.getTargetID()); } else { playerCharacter.setCombatTarget(null); return true; //not valid type to attack } // quit of the combat target is already the current combat target // or there is no combat target if (target == null) return true; ; //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; } }