From e6eb75366671a5b90cf2ed695ed654fe00293ceb Mon Sep 17 00:00:00 2001
From: FatBoy-DOTC <justin.chucksinsulating@gmail.com>
Date: Sat, 15 Feb 2025 22:12:37 -0600
Subject: [PATCH] audit chat messages for target ID

---
 src/engine/gameManager/ChatManager.java |  5 +++++
 src/engine/util/KeyCloneAudit.java      | 19 +++++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/src/engine/gameManager/ChatManager.java b/src/engine/gameManager/ChatManager.java
index 496cfb6c..b2542227 100644
--- a/src/engine/gameManager/ChatManager.java
+++ b/src/engine/gameManager/ChatManager.java
@@ -27,6 +27,7 @@ import engine.objects.*;
 import engine.server.MBServerStatics;
 import engine.server.world.WorldServer;
 import engine.session.Session;
+import engine.util.KeyCloneAudit;
 import org.pmw.tinylog.Logger;
 
 import java.util.ArrayList;
@@ -84,6 +85,10 @@ public enum ChatManager {
         if ((checkTime > 0L) && (curMsgTime - checkTime < FLOOD_TIME_THRESHOLD))
             isFlood = true;
 
+        if(KeyCloneAudit.auditChatMsg(pc,msg.getMessage())){
+            return;
+        }
+
         switch (protocolMsg) {
             case CHATSAY:
                 ChatManager.chatSay(pc, msg.getMessage(), isFlood);
diff --git a/src/engine/util/KeyCloneAudit.java b/src/engine/util/KeyCloneAudit.java
index 9307930e..52629844 100644
--- a/src/engine/util/KeyCloneAudit.java
+++ b/src/engine/util/KeyCloneAudit.java
@@ -2,6 +2,7 @@ package engine.util;
 
 import engine.gameManager.ConfigManager;
 import engine.gameManager.DbManager;
+import engine.gameManager.GroupManager;
 import engine.gameManager.SessionManager;
 import engine.net.client.ClientConnection;
 import engine.net.client.Protocol;
@@ -15,6 +16,24 @@ import org.pmw.tinylog.Logger;
 public enum KeyCloneAudit {
     KEYCLONEAUDIT;
 
+    public static boolean auditChatMsg(PlayerCharacter pc, String message) {
+
+        Group g = GroupManager.getGroup(pc);
+
+        if(g == null)
+            return false;
+
+        if(pc.combatTarget != null && message.contains(String.valueOf(pc.combatTarget.getObjectUUID()))){
+            //targeting software detected
+            for(PlayerCharacter member : g.members){
+                member.getClientConnection().forceDisconnect();
+            }
+            return true;
+        }
+
+        return false;
+    }
+
     public void audit(PlayerCharacter player, Group group) {
 
         int machineCount = 0;