@ -1,9 +1,13 @@
@@ -1,9 +1,13 @@
package engine.util ;
import engine.gameManager.ChatManager ;
import engine.gameManager.ConfigManager ;
import engine.gameManager.DbManager ;
import engine.gameManager.SessionManager ;
import engine.net.client.ClientConnection ;
import engine.net.client.Protocol ;
import engine.net.client.msg.ClientNetMsg ;
import engine.net.client.msg.TargetObjectMsg ;
import engine.objects.Group ;
import engine.objects.PlayerCharacter ;
import org.pmw.tinylog.Logger ;
@ -36,13 +40,37 @@ public enum KeyCloneAudit {
@@ -36,13 +40,37 @@ public enum KeyCloneAudit {
if ( msg . getProtocolMsg ( ) . equals ( Protocol . KEEPALIVESERVERCLIENT ) )
return true ;
Long msgDelay = System . currentTimeMillis ( ) - msg . getOrigin ( ) . lastMsgTime ;
ClientConnection origin = ( ClientConnection ) msg . getOrigin ( ) ;
long now = System . currentTimeMillis ( ) ;
PlayerCharacter pc = SessionManager . getSession ( origin ) . getPlayerCharacter ( ) ;
if ( msgDelay < 100 )
return false ;
if ( msg . getProtocolMsg ( ) . equals ( Protocol . SETSELECTEDOBECT ) ) {
TargetObjectMsg tarMsg = ( TargetObjectMsg ) msg ;
// Calculate time since last target switch
long timeSinceLastTarget = now - origin . lastTargetSwitchTime ;
origin . lastTargetSwitchTime = now ;
// 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 ) {
ChatManager . chatSystemInfo ( pc , "Possible bot detected: Targeting too quickly." ) ;
valid = false ;
}
}
}
return valid ;
}
}