@ -1,14 +1,17 @@
@@ -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 {
@@ -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
KeepAliveServerClient Msg msg ;
AttackCmd Msg 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 ;
}