diff --git a/src/engine/gameManager/CombatManager.java b/src/engine/gameManager/CombatManager.java index 9f0e1843..dbb507f9 100644 --- a/src/engine/gameManager/CombatManager.java +++ b/src/engine/gameManager/CombatManager.java @@ -30,8 +30,6 @@ import java.util.HashSet; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ThreadLocalRandom; -import static engine.math.FastMath.sqr; - public enum CombatManager { COMBATMANAGER; @@ -41,63 +39,6 @@ public enum CombatManager { /** * Message sent by player to attack something. */ - public static void setAttackTarget(AttackCmdMsg msg, ClientConnection origin) throws MsgSendException { - - PlayerCharacter player; - int targetType; - AbstractWorldObject target; - - if (TargetedActionMsg.un2cnt == 60 || TargetedActionMsg.un2cnt == 70) - return; - - player = SessionManager.getPlayerCharacter(origin); - - if (player == null) - return; - - //source must match player this account belongs to - - if (player.getObjectUUID() != msg.getSourceID() || player.getObjectType().ordinal() != msg.getSourceType()) { - Logger.error("Msg Source ID " + msg.getSourceID() + " Does not Match Player ID " + player.getObjectUUID()); - return; - } - - targetType = msg.getTargetType(); - - if (targetType == GameObjectType.PlayerCharacter.ordinal()) { - target = PlayerCharacter.getFromCache(msg.getTargetID()); - } else if (targetType == GameObjectType.Building.ordinal()) { - target = BuildingManager.getBuildingFromCache(msg.getTargetID()); - } else if (targetType == GameObjectType.Mob.ordinal()) { - target = Mob.getFromCache(msg.getTargetID()); - } else { - player.setCombatTarget(null); - return; //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; - - //set sources target - - player.setCombatTarget(target); - - //put in combat if not already - - if (!player.isCombat()) - toggleCombat(true, origin); - - //make character stand if sitting - - if (player.isSit()) - toggleSit(false, origin); - - AttackTarget(player, target); - - } public static void AttackTarget(PlayerCharacter playerCharacter, AbstractWorldObject target) { @@ -1184,7 +1125,7 @@ public enum CombatManager { toggleCombat(msg.getToggle(), origin); } - private static void toggleCombat(boolean toggle, ClientConnection origin) { + public static void toggleCombat(boolean toggle, ClientConnection origin) { PlayerCharacter pc = SessionManager.getPlayerCharacter(origin); @@ -1201,7 +1142,7 @@ public enum CombatManager { DispatchMessage.dispatchMsgToInterestArea(pc, rwss, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, false, false); } - private static void toggleSit(boolean toggle, ClientConnection origin) { + public static void toggleSit(boolean toggle, ClientConnection origin) { PlayerCharacter pc = SessionManager.getPlayerCharacter(origin); diff --git a/src/engine/net/client/ClientMessagePump.java b/src/engine/net/client/ClientMessagePump.java index d31a63c3..c5c13b04 100644 --- a/src/engine/net/client/ClientMessagePump.java +++ b/src/engine/net/client/ClientMessagePump.java @@ -1892,9 +1892,6 @@ public class ClientMessagePump implements NetMsgHandler { case POWER: PowersManager.usePower((PerformActionMsg) msg, origin, false); break; - case REQUESTMELEEATTACK: - CombatManager.setAttackTarget((AttackCmdMsg) msg, origin); - break; case READYTOENTER: break; case OPENVAULT: diff --git a/src/engine/net/client/handlers/AttackCmdMsgHandler.java b/src/engine/net/client/handlers/AttackCmdMsgHandler.java index 22b456d5..774358f6 100644 --- a/src/engine/net/client/handlers/AttackCmdMsgHandler.java +++ b/src/engine/net/client/handlers/AttackCmdMsgHandler.java @@ -1,14 +1,17 @@ package engine.net.client.handlers; -import engine.Enum.DispatchChannel; +import engine.Enum; import engine.exception.MsgSendException; -import engine.net.Dispatch; -import engine.net.DispatchMessage; +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.KeepAliveServerClientMsg; +import engine.net.client.msg.TargetedActionMsg; +import engine.objects.AbstractWorldObject; +import engine.objects.Mob; import engine.objects.PlayerCharacter; +import org.pmw.tinylog.Logger; /* * @Author: @@ -25,22 +28,67 @@ public class AttackCmdMsgHandler extends AbstractClientMsgHandler { @Override protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException { - PlayerCharacter pc = origin.getPlayerCharacter(); - + PlayerCharacter playerCharacter = origin.getPlayerCharacter(); // Member variable declaration - KeepAliveServerClientMsg msg; + AttackCmdMsg msg; // Member variable assignment - msg = (KeepAliveServerClientMsg) baseMsg; + 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 - // Send ping to client + if (playerCharacter.isSit()) + CombatManager.toggleSit(false, origin); - Dispatch dispatch = Dispatch.borrow(pc, msg); - DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY); + CombatManager.AttackTarget(playerCharacter, target); return true; }