forked from MagicBane/Server
Handler filled in with logic.
This commit is contained in:
@@ -30,8 +30,6 @@ import java.util.HashSet;
|
|||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
import static engine.math.FastMath.sqr;
|
|
||||||
|
|
||||||
public enum CombatManager {
|
public enum CombatManager {
|
||||||
|
|
||||||
COMBATMANAGER;
|
COMBATMANAGER;
|
||||||
@@ -41,63 +39,6 @@ public enum CombatManager {
|
|||||||
/**
|
/**
|
||||||
* Message sent by player to attack something.
|
* 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) {
|
public static void AttackTarget(PlayerCharacter playerCharacter, AbstractWorldObject target) {
|
||||||
|
|
||||||
@@ -1184,7 +1125,7 @@ public enum CombatManager {
|
|||||||
toggleCombat(msg.getToggle(), origin);
|
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);
|
PlayerCharacter pc = SessionManager.getPlayerCharacter(origin);
|
||||||
|
|
||||||
@@ -1201,7 +1142,7 @@ public enum CombatManager {
|
|||||||
DispatchMessage.dispatchMsgToInterestArea(pc, rwss, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, false, false);
|
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);
|
PlayerCharacter pc = SessionManager.getPlayerCharacter(origin);
|
||||||
|
|
||||||
|
|||||||
@@ -1892,9 +1892,6 @@ public class ClientMessagePump implements NetMsgHandler {
|
|||||||
case POWER:
|
case POWER:
|
||||||
PowersManager.usePower((PerformActionMsg) msg, origin, false);
|
PowersManager.usePower((PerformActionMsg) msg, origin, false);
|
||||||
break;
|
break;
|
||||||
case REQUESTMELEEATTACK:
|
|
||||||
CombatManager.setAttackTarget((AttackCmdMsg) msg, origin);
|
|
||||||
break;
|
|
||||||
case READYTOENTER:
|
case READYTOENTER:
|
||||||
break;
|
break;
|
||||||
case OPENVAULT:
|
case OPENVAULT:
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
package engine.net.client.handlers;
|
package engine.net.client.handlers;
|
||||||
|
|
||||||
import engine.Enum.DispatchChannel;
|
import engine.Enum;
|
||||||
import engine.exception.MsgSendException;
|
import engine.exception.MsgSendException;
|
||||||
import engine.net.Dispatch;
|
import engine.gameManager.BuildingManager;
|
||||||
import engine.net.DispatchMessage;
|
import engine.gameManager.CombatManager;
|
||||||
import engine.net.client.ClientConnection;
|
import engine.net.client.ClientConnection;
|
||||||
import engine.net.client.msg.AttackCmdMsg;
|
import engine.net.client.msg.AttackCmdMsg;
|
||||||
import engine.net.client.msg.ClientNetMsg;
|
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 engine.objects.PlayerCharacter;
|
||||||
|
import org.pmw.tinylog.Logger;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @Author:
|
* @Author:
|
||||||
@@ -25,22 +28,67 @@ public class AttackCmdMsgHandler extends AbstractClientMsgHandler {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException {
|
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException {
|
||||||
|
|
||||||
PlayerCharacter pc = origin.getPlayerCharacter();
|
PlayerCharacter playerCharacter = origin.getPlayerCharacter();
|
||||||
|
|
||||||
|
|
||||||
// Member variable declaration
|
// Member variable declaration
|
||||||
|
|
||||||
KeepAliveServerClientMsg msg;
|
AttackCmdMsg msg;
|
||||||
|
|
||||||
// Member variable assignment
|
// Member variable assignment
|
||||||
|
|
||||||
msg = (KeepAliveServerClientMsg) baseMsg;
|
msg = (AttackCmdMsg) baseMsg;
|
||||||
|
|
||||||
|
int targetType;
|
||||||
|
AbstractWorldObject target;
|
||||||
|
|
||||||
// Send ping to client
|
if (TargetedActionMsg.un2cnt == 60 || TargetedActionMsg.un2cnt == 70)
|
||||||
|
return true;
|
||||||
|
|
||||||
Dispatch dispatch = Dispatch.borrow(pc, msg);
|
if (playerCharacter == null)
|
||||||
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user