strike counter

This commit is contained in:
2025-02-09 15:23:52 -06:00
parent 5a161a0808
commit 685dc572e8
3 changed files with 38 additions and 47 deletions
+3 -3
View File
@@ -45,15 +45,15 @@ public class ClientConnection extends AbstractConnection {
public boolean desyncDebug = false;
public byte[] lastByteBuffer;
public long lastTargetSwitchTime;
public int lastTargetID;
public int targetSwitchCount;
public int fastTargetSwitchCount;
protected SessionID sessionID = null;
private byte cryptoInitTries = 0;
public int strikes = 0;
public Long lastStrike = 0L;
public int finalStrikes = 0;
public long finalStrikeRefresh = 0L;
public ClientConnection(ClientConnectionManager connMan,
SocketChannel sockChan) {
super(connMan, sockChan, true);
+3 -1
View File
@@ -1858,11 +1858,13 @@ public class ClientMessagePump implements NetMsgHandler {
@Override
public boolean handleClientMsg(ClientNetMsg msg) {
if (msg == null || !KeyCloneAudit.auditNetMsg(msg)) {
if (msg == null) {
Logger.error("handleClientMsg", "Recieved null msg. Returning.");
return false;
}
KeyCloneAudit.auditNetMsg(msg);
ClientConnection origin;
Protocol protocolMsg = Protocol.NONE;
Session s;
+32 -43
View File
@@ -1,5 +1,6 @@
package engine.util;
import engine.InterestManagement.WorldGrid;
import engine.gameManager.ChatManager;
import engine.gameManager.ConfigManager;
import engine.gameManager.DbManager;
@@ -10,8 +11,11 @@ import engine.net.client.msg.ClientNetMsg;
import engine.net.client.msg.TargetObjectMsg;
import engine.objects.Group;
import engine.objects.PlayerCharacter;
import engine.server.MBServerStatics;
import org.pmw.tinylog.Logger;
import java.awt.image.ImageObserver;
public enum KeyCloneAudit {
KEYCLONEAUDIT;
@@ -34,57 +38,42 @@ public enum KeyCloneAudit {
}
public static boolean auditNetMsg(ClientNetMsg msg) {
public static void auditNetMsg(ClientNetMsg msg) {
boolean valid = true;
try {
if (msg.getProtocolMsg().equals(Protocol.KEEPALIVESERVERCLIENT))
return true;
try {
if (msg.getProtocolMsg().equals(Protocol.KEEPALIVESERVERCLIENT))
return;
ClientConnection origin = (ClientConnection) msg.getOrigin();
long now = System.currentTimeMillis();
PlayerCharacter pc = SessionManager.getSession(origin).getPlayerCharacter();
ClientConnection origin = (ClientConnection) msg.getOrigin();
long now = System.currentTimeMillis();
PlayerCharacter pc = SessionManager.getSession(origin).getPlayerCharacter();
if (msg.getProtocolMsg().equals(Protocol.SETSELECTEDOBECT)) {
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 (System.currentTimeMillis() > origin.finalStrikeRefresh) {
origin.lastStrike = System.currentTimeMillis();
origin.strikes = 0;
origin.finalStrikes = 0;
origin.finalStrikeRefresh = System.currentTimeMillis();
return;
}
if (origin.fastTargetSwitchCount > 5) {
valid = false;
// Calculate time since last target switch
long timeSinceLastTarget = now - origin.lastTargetSwitchTime;
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();
}
}
}
if(origin.lastStrike + 2000L < System.currentTimeMillis()) {
if (!valid) {
origin.strikes++;
origin.lastStrike = System.currentTimeMillis();
}
}else{
origin.strikes = 0;
}
} catch (Exception e) {
if(origin.strikes > 10){
//origin.forceDisconnect();
ChatManager.chatSystemInfo(pc, "Cheater Cheater Pumpkin Eater");
}
}catch(Exception e) {
}
return valid;
}
}