Browse Source

strike counter

lakebane-ai
FatBoy-DOTC 2 weeks ago
parent
commit
685dc572e8
  1. 6
      src/engine/net/client/ClientConnection.java
  2. 4
      src/engine/net/client/ClientMessagePump.java
  3. 79
      src/engine/util/KeyCloneAudit.java

6
src/engine/net/client/ClientConnection.java

@ -45,15 +45,15 @@ public class ClientConnection extends AbstractConnection {
public boolean desyncDebug = false; public boolean desyncDebug = false;
public byte[] lastByteBuffer; public byte[] lastByteBuffer;
public long lastTargetSwitchTime; public long lastTargetSwitchTime;
public int lastTargetID;
public int targetSwitchCount;
public int fastTargetSwitchCount;
protected SessionID sessionID = null; protected SessionID sessionID = null;
private byte cryptoInitTries = 0; private byte cryptoInitTries = 0;
public int strikes = 0; public int strikes = 0;
public Long lastStrike = 0L; public Long lastStrike = 0L;
public int finalStrikes = 0;
public long finalStrikeRefresh = 0L;
public ClientConnection(ClientConnectionManager connMan, public ClientConnection(ClientConnectionManager connMan,
SocketChannel sockChan) { SocketChannel sockChan) {
super(connMan, sockChan, true); super(connMan, sockChan, true);

4
src/engine/net/client/ClientMessagePump.java

@ -1858,11 +1858,13 @@ public class ClientMessagePump implements NetMsgHandler {
@Override @Override
public boolean handleClientMsg(ClientNetMsg msg) { public boolean handleClientMsg(ClientNetMsg msg) {
if (msg == null || !KeyCloneAudit.auditNetMsg(msg)) { if (msg == null) {
Logger.error("handleClientMsg", "Recieved null msg. Returning."); Logger.error("handleClientMsg", "Recieved null msg. Returning.");
return false; return false;
} }
KeyCloneAudit.auditNetMsg(msg);
ClientConnection origin; ClientConnection origin;
Protocol protocolMsg = Protocol.NONE; Protocol protocolMsg = Protocol.NONE;
Session s; Session s;

79
src/engine/util/KeyCloneAudit.java

@ -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();
// Calculate time since last target switch origin.strikes = 0;
long timeSinceLastTarget = now - origin.lastTargetSwitchTime; origin.finalStrikes = 0;
origin.lastTargetSwitchTime = now; origin.finalStrikeRefresh = System.currentTimeMillis();
return;
// 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);
} }
// Calculate time since last target switch
if (origin.fastTargetSwitchCount > 5) { long timeSinceLastTarget = now - origin.lastTargetSwitchTime;
valid = false; origin.lastTargetSwitchTime = now;
if (timeSinceLastTarget < 150) {
origin.strikes++;
origin.finalStrikeRefresh = System.currentTimeMillis() + 1000L;
}
if (origin.strikes > 20) {
origin.finalStrikes++;
ChatManager.chatSystemInfo(pc, "Strike Received");
}
if (origin.finalStrikes > 3) {
origin.forceDisconnect();
} }
} }
} } catch (Exception e) {
if(origin.lastStrike + 2000L < System.currentTimeMillis()) {
if (!valid) {
origin.strikes++;
origin.lastStrike = System.currentTimeMillis();
}
}else{
origin.strikes = 0;
}
if(origin.strikes > 10){
//origin.forceDisconnect();
ChatManager.chatSystemInfo(pc, "Cheater Cheater Pumpkin Eater");
} }
}catch(Exception e) {
}
return valid;
} }
} }

Loading…
Cancel
Save