@ -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 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }