Files
magicbane/src/engine/net/client/handlers/AttackCmdMsgHandler.java
T

96 lines
2.8 KiB
Java
Raw Normal View History

2023-09-10 13:43:28 -04:00
package engine.net.client.handlers;
2023-09-10 13:52:04 -04:00
import engine.Enum;
2023-09-10 13:43:28 -04:00
import engine.exception.MsgSendException;
2023-09-10 13:52:04 -04:00
import engine.gameManager.BuildingManager;
import engine.gameManager.CombatManager;
2023-09-10 13:43:28 -04:00
import engine.net.client.ClientConnection;
import engine.net.client.msg.AttackCmdMsg;
import engine.net.client.msg.ClientNetMsg;
2023-09-10 13:52:04 -04:00
import engine.net.client.msg.TargetedActionMsg;
import engine.objects.AbstractWorldObject;
import engine.objects.Mob;
2023-09-10 13:43:28 -04:00
import engine.objects.PlayerCharacter;
2023-09-10 13:52:04 -04:00
import org.pmw.tinylog.Logger;
2023-09-10 13:43:28 -04:00
/*
* @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 {
2023-09-10 13:52:04 -04:00
PlayerCharacter playerCharacter = origin.getPlayerCharacter();
2023-09-10 13:43:28 -04:00
// Member variable declaration
2023-09-10 13:52:04 -04:00
AttackCmdMsg msg;
2023-09-10 13:43:28 -04:00
// Member variable assignment
2023-09-10 13:52:04 -04:00
msg = (AttackCmdMsg) baseMsg;
2023-09-10 13:43:28 -04:00
2023-09-10 13:52:04 -04:00
int targetType;
AbstractWorldObject target;
2023-09-10 13:43:28 -04:00
2023-09-10 13:52:04 -04:00
if (TargetedActionMsg.un2cnt == 60 || TargetedActionMsg.un2cnt == 70)
return true;
2023-09-10 13:43:28 -04:00
2023-09-10 13:52:04 -04:00
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);
2023-09-10 13:43:28 -04:00
return true;
}
}