|  |  | @ -1,5 +1,6 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | package engine.util; |  |  |  | package engine.util; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import engine.InterestManagement.WorldGrid; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.gameManager.ChatManager; |  |  |  | import engine.gameManager.ChatManager; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.gameManager.ConfigManager; |  |  |  | import engine.gameManager.ConfigManager; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.gameManager.DbManager; |  |  |  | import engine.gameManager.DbManager; | 
			
		
	
	
		
		
			
				
					|  |  | @ -10,8 +11,11 @@ import engine.net.client.msg.ClientNetMsg; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.net.client.msg.TargetObjectMsg; |  |  |  | import engine.net.client.msg.TargetObjectMsg; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.objects.Group; |  |  |  | import engine.objects.Group; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.objects.PlayerCharacter; |  |  |  | import engine.objects.PlayerCharacter; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import engine.server.MBServerStatics; | 
			
		
	
		
		
			
				
					
					|  |  |  | import org.pmw.tinylog.Logger; |  |  |  | import org.pmw.tinylog.Logger; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import java.awt.image.ImageObserver; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | public enum KeyCloneAudit { |  |  |  | public enum KeyCloneAudit { | 
			
		
	
		
		
			
				
					
					|  |  |  |     KEYCLONEAUDIT; |  |  |  |     KEYCLONEAUDIT; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -34,57 +38,42 @@ public enum KeyCloneAudit { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static boolean auditNetMsg(ClientNetMsg msg) { |  |  |  |     public static void auditNetMsg(ClientNetMsg msg) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         boolean valid = true; |  |  |  |         boolean valid = true; | 
			
		
	
		
		
			
				
					
					|  |  |  |         try { |  |  |  |         try { | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (msg.getProtocolMsg().equals(Protocol.KEEPALIVESERVERCLIENT)) |  |  |  |             if (msg.getProtocolMsg().equals(Protocol.KEEPALIVESERVERCLIENT)) | 
			
		
	
		
		
			
				
					
					|  |  |  |             return true; |  |  |  |                 return; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             ClientConnection origin = (ClientConnection) msg.getOrigin(); |  |  |  |             ClientConnection origin = (ClientConnection) msg.getOrigin(); | 
			
		
	
		
		
			
				
					
					|  |  |  |             long now = System.currentTimeMillis(); |  |  |  |             long now = System.currentTimeMillis(); | 
			
		
	
		
		
			
				
					
					|  |  |  |             PlayerCharacter pc = SessionManager.getSession(origin).getPlayerCharacter(); |  |  |  |             PlayerCharacter pc = SessionManager.getSession(origin).getPlayerCharacter(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (msg.getProtocolMsg().equals(Protocol.SETSELECTEDOBECT)) { |  |  |  |             if (msg.getProtocolMsg().equals(Protocol.SETSELECTEDOBECT)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             TargetObjectMsg tarMsg = (TargetObjectMsg) msg; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 if (System.currentTimeMillis() > origin.finalStrikeRefresh) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     origin.lastStrike = System.currentTimeMillis(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     origin.strikes = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     origin.finalStrikes = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     origin.finalStrikeRefresh = System.currentTimeMillis(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     return; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |                 // Calculate time since last target switch
 |  |  |  |                 // Calculate time since last target switch
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                 long timeSinceLastTarget = now - origin.lastTargetSwitchTime; |  |  |  |                 long timeSinceLastTarget = now - origin.lastTargetSwitchTime; | 
			
		
	
		
		
			
				
					
					|  |  |  |                 origin.lastTargetSwitchTime = now; |  |  |  |                 origin.lastTargetSwitchTime = now; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |                 if (timeSinceLastTarget < 150) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             // Check if the target has changed
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (tarMsg.getTargetID() != origin.lastTargetID) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 origin.lastTargetID = tarMsg.getTargetID(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 origin.targetSwitchCount++; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 // If switching too fast, flag as bot-like behavior
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if (timeSinceLastTarget < 300) { // Adjust this threshold if needed
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     origin.fastTargetSwitchCount++; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } else { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     origin.fastTargetSwitchCount = Math.max(0, origin.fastTargetSwitchCount - 1); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if (origin.fastTargetSwitchCount > 5) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     valid = false; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(origin.lastStrike + 2000L < System.currentTimeMillis()) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (!valid) { |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                     origin.strikes++; |  |  |  |                     origin.strikes++; | 
			
		
	
		
		
			
				
					
					|  |  |  |                 origin.lastStrike = System.currentTimeMillis(); |  |  |  |                     origin.finalStrikeRefresh = System.currentTimeMillis() + 1000L; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |         }else{ |  |  |  |                 if (origin.strikes > 20) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             origin.strikes = 0; |  |  |  |                     origin.finalStrikes++; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     ChatManager.chatSystemInfo(pc, "Strike Received"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 if (origin.finalStrikes > 3) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     origin.forceDisconnect(); | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(origin.strikes > 10){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             //origin.forceDisconnect();
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             ChatManager.chatSystemInfo(pc, "Cheater Cheater Pumpkin Eater"); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |         } catch (Exception e) { |  |  |  |         } catch (Exception e) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |         return valid; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |