From 89ce952e1cbf70812d37c7b8b0c7d9940077754c Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sun, 1 Feb 2026 22:28:36 -0500 Subject: [PATCH 1/6] Added forcekill command --- .../rs2/game/dialogues/DialogueHandler.java | 11 ++++++ .../rs2/game/dialogues/DialogueOptions.java | 30 ++++++++++++++-- .../java/com/rs2/game/players/Player.java | 9 +++++ .../com/rs2/net/packets/impl/Commands.java | 35 +++++++++++++++++++ 4 files changed, 83 insertions(+), 2 deletions(-) diff --git a/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueHandler.java b/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueHandler.java index cb474361f..7f3a9aa9f 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueHandler.java +++ b/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueHandler.java @@ -7635,6 +7635,17 @@ public void sendDialogues2(int dialogue, int npcId) { sendOption("x" + Constants.VARIABLE_XP_RATES[3], "Don't Change"); player.dialogueAction = 10007; break; + case 20000: + String targetName = player.getTempString(); + sendNpcChat(2244, ChatEmotes.DEFAULT, + "Are you sure you want to kill " + targetName + "?", + "This action cannot be undone!"); + player.nextChat = 20001; + break; + case 20001: + sendOption("Yes, proceed with kill", "No, cancel"); + player.dialogueAction = 20000; + break; } } public void chatboxText(String text, String text1, String text2, diff --git a/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java b/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java index 60428fac9..8f0e3d186 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java +++ b/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java @@ -7,6 +7,7 @@ import com.rs2.game.items.impl.Flowers; import com.rs2.game.items.impl.Teles; import com.rs2.game.players.Player; +import com.rs2.game.players.PlayerHandler; /** * Dialogue Options @@ -340,7 +341,27 @@ public static void handleDialogueOptions(Player player, int buttonId) { } break; case 9157:// barrows tele to tunnels - if (player.dialogueAction == 1) { + if (player.dialogueAction == 20000) { + // Yes, proceed with kill + String targetName = player.getTempString(); + boolean found = false; + for (Player player2 : PlayerHandler.players) { + if (player2 != null) { + if (player2.playerName.equalsIgnoreCase(targetName)) { + player2.dealDamage(player2.playerLevel[Constants.HITPOINTS]); + player.getPacketSender().sendMessage("You have killed " + player2.playerName + "."); + player2.getPacketSender().sendMessage("You have been killed by " + player.playerName + "."); + found = true; + break; + } + } + } + if (!found) { + player.getPacketSender().sendMessage("Player must be online."); + } + player.getPacketSender().closeAllWindows(); + return; + } else if (player.dialogueAction == 1) { int r = 4; // int r = Misc.random(3); @@ -671,7 +692,12 @@ else if (player.dialogueAction == 7559) { break; case 9158: - if (player.dialogueAction == 8) { + if (player.dialogueAction == 20000) { + // No, cancel + player.getPacketSender().sendMessage("Kill cancelled."); + player.getPacketSender().closeAllWindows(); + return; + } else if (player.dialogueAction == 8) { player.getPlayerAssistant().fixAllBarrows(); } else if (player.dialogueAction == 29) { player.getDialogueHandler().sendDialogues(481, player.npcType); diff --git a/2006Scape Server/src/main/java/com/rs2/game/players/Player.java b/2006Scape Server/src/main/java/com/rs2/game/players/Player.java index c5c5e5693..7ae4bcdc7 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/players/Player.java +++ b/2006Scape Server/src/main/java/com/rs2/game/players/Player.java @@ -453,6 +453,7 @@ public Inventory getInventory() { private int tempInteger; public boolean tempBoolean; + private String tempString; public void setTempInteger(int tempInteger) { this.tempInteger = tempInteger; @@ -462,6 +463,14 @@ public int getTempInteger() { return tempInteger; } + public void setTempString(String tempString) { + this.tempString = tempString; + } + + public String getTempString() { + return tempString; + } + public int totalShopItems; public boolean stopPlayer(boolean stop) { diff --git a/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java b/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java index 6b7617936..8917650df 100644 --- a/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java +++ b/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java @@ -441,6 +441,41 @@ public void run() { case "close_interface": player.getPacketSender().closeAllWindows(); break; + case "forcekill": + try { + if (arguments.length == 0) { + // Show confirmation dialogue + player.setTempString(player.playerName); + player.getDialogueHandler().sendDialogues(20000, 2244); + } else { + // Kill another player (moderator+ only) - Show confirmation dialogue + if (player.playerRights < 1) { + player.getPacketSender().sendMessage("You must be a moderator or higher to kill other players."); + return; + } + String playerToKill = String.join(" ", arguments); + // Check if player exists before showing dialogue + boolean found = false; + for (Player player2 : PlayerHandler.players) { + if (player2 != null) { + if (player2.playerName.equalsIgnoreCase(playerToKill)) { + found = true; + break; + } + } + } + if (!found) { + player.getPacketSender().sendMessage("Player must be online."); + return; + } + // Show confirmation dialogue + player.setTempString(playerToKill); + player.getDialogueHandler().sendDialogues(20000, 2244); + } + } catch (Exception e) { + player.getPacketSender().sendMessage("An error occurred."); + } + break; case "commands": case "cmd": String[] commands = new String[]{ From f80260e5f151c34539c3f8e261530cd1e72c8023 Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sun, 1 Feb 2026 22:30:04 -0500 Subject: [PATCH 2/6] Fixed error --- .../src/main/java/com/rs2/net/packets/impl/Commands.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java b/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java index 8917650df..54669d3aa 100644 --- a/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java +++ b/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java @@ -455,16 +455,16 @@ public void run() { } String playerToKill = String.join(" ", arguments); // Check if player exists before showing dialogue - boolean found = false; + boolean foundPlayer = false; for (Player player2 : PlayerHandler.players) { if (player2 != null) { if (player2.playerName.equalsIgnoreCase(playerToKill)) { - found = true; + foundPlayer = true; break; } } } - if (!found) { + if (!foundPlayer) { player.getPacketSender().sendMessage("Player must be online."); return; } From ce248c8d06758761d8ab41a559371af39a516873 Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sun, 1 Feb 2026 22:44:00 -0500 Subject: [PATCH 3/6] Fixed forcekill command --- .../src/main/java/com/rs2/game/dialogues/DialogueOptions.java | 1 + 1 file changed, 1 insertion(+) diff --git a/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java b/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java index 8f0e3d186..9d6811f6f 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java +++ b/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java @@ -349,6 +349,7 @@ public static void handleDialogueOptions(Player player, int buttonId) { if (player2 != null) { if (player2.playerName.equalsIgnoreCase(targetName)) { player2.dealDamage(player2.playerLevel[Constants.HITPOINTS]); + player2.getPlayerAssistant().applyDead(); player.getPacketSender().sendMessage("You have killed " + player2.playerName + "."); player2.getPacketSender().sendMessage("You have been killed by " + player.playerName + "."); found = true; From 8f274d4578537fb1ccddac60aef7f8c9199cd3ec Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sun, 1 Feb 2026 22:44:11 -0500 Subject: [PATCH 4/6] Added forcekill command to commands list --- .../src/main/java/com/rs2/net/packets/impl/Commands.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java b/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java index 54669d3aa..c8f04c5c1 100644 --- a/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java +++ b/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java @@ -509,6 +509,9 @@ public void run() { "::withdrawshop(::wshop)", "Withdraw profits from player owned shop", "", + "::forcekill", + "You can use this command if you get stuck in the wild.", + "", "::togglenpckillmsgs(::togglenpckcmsgs)", "Toggle regular NPC kill count message display","", "", @@ -1218,7 +1221,7 @@ public static void developerCommands(Player player, String playerCommand, String {556, amount}, {557, amount}, {558, amount}, {559, amount}, {560, amount}, {561, amount}, {562, amount}, {563, amount}, {564, amount}, - {565, amount}, {566, amount}, {1963, 1},}; + {565, amount}, {566, amount}, {1963, 1},}; // Why is 1963 aka a banana here? for (int[] element : RUNES) { int item = element[0]; int amountToRecieve = element[1]; From 305afd3e36ee6443387366bc24bb464cd99a77aa Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Wed, 4 Feb 2026 12:43:13 -0500 Subject: [PATCH 5/6] Added logging for forcekill command --- .../rs2/game/dialogues/DialogueOptions.java | 29 +++++++++++++++++++ .../com/rs2/net/packets/impl/Commands.java | 17 +++++++++++ 2 files changed, 46 insertions(+) diff --git a/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java b/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java index 9d6811f6f..dcec4f654 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java +++ b/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java @@ -8,6 +8,9 @@ import com.rs2.game.items.impl.Teles; import com.rs2.game.players.Player; import com.rs2.game.players.PlayerHandler; +import com.rs2.integrations.discord.JavaCord; + +import static com.rs2.util.GameLogger.writeLog; /** * Dialogue Options @@ -352,6 +355,19 @@ public static void handleDialogueOptions(Player player, int buttonId) { player2.getPlayerAssistant().applyDead(); player.getPacketSender().sendMessage("You have killed " + player2.playerName + "."); player2.getPacketSender().sendMessage("You have been killed by " + player.playerName + "."); + String logMsg; + if (player.playerRights >= 1 && !player.playerName.equalsIgnoreCase(player2.playerName)) { + logMsg = player.playerName + " (mod) confirmed ::forcekill on " + player2.playerName + + " at X/Y: " + player2.absX + "/" + player2.absY + + " | Mod location X/Y: " + player.absX + "/" + player.absY; + } else { + logMsg = player.playerName + " confirmed ::forcekill on " + player.playerName + " at X/Y: " + player2.absX + "/" + player2.absY; + } + writeLog(player.playerName, "forcekill", logMsg); + System.err.println(logMsg); + if (JavaCord.token != null && JavaCord.api != null && JavaCord.api.getTextChannelById(JavaCord.logChannelId).isPresent()) { + JavaCord.api.getTextChannelById(JavaCord.logChannelId).get().sendMessage(logMsg); + } found = true; break; } @@ -695,6 +711,19 @@ else if (player.dialogueAction == 7559) { case 9158: if (player.dialogueAction == 20000) { // No, cancel + String cancelTarget = player.getTempString(); + String cancelMsg; + if (player.playerRights >= 1 && !player.playerName.equalsIgnoreCase(cancelTarget)) { + cancelMsg = player.playerName + " (mod) cancelled ::forcekill on " + cancelTarget + + " | Mod location X/Y: " + player.absX + "/" + player.absY; + } else { + cancelMsg = player.playerName + " cancelled ::forcekill on themselves at X/Y: " + player.absX + "/" + player.absY; + } + writeLog(player.playerName, "forcekill", cancelMsg); + System.err.println(cancelMsg); + if (JavaCord.token != null && JavaCord.api != null && JavaCord.api.getTextChannelById(JavaCord.logChannelId).isPresent()) { + JavaCord.api.getTextChannelById(JavaCord.logChannelId).get().sendMessage(cancelMsg); + } player.getPacketSender().sendMessage("Kill cancelled."); player.getPacketSender().closeAllWindows(); return; diff --git a/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java b/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java index c8f04c5c1..f42e718e4 100644 --- a/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java +++ b/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java @@ -447,6 +447,12 @@ public void run() { // Show confirmation dialogue player.setTempString(player.playerName); player.getDialogueHandler().sendDialogues(20000, 2244); + String logMsg = player.playerName + " used ::forcekill on " + player.playerName + " at X/Y: " + player.absX + "/" + player.absY; + writeLog(player.playerName, "forcekill", logMsg); + System.err.println(logMsg); + if (JavaCord.token != null && JavaCord.api != null && JavaCord.api.getTextChannelById(JavaCord.logChannelId).isPresent()) { + JavaCord.api.getTextChannelById(JavaCord.logChannelId).get().sendMessage(logMsg); + } } else { // Kill another player (moderator+ only) - Show confirmation dialogue if (player.playerRights < 1) { @@ -456,10 +462,13 @@ public void run() { String playerToKill = String.join(" ", arguments); // Check if player exists before showing dialogue boolean foundPlayer = false; + int targetX = 0, targetY = 0; for (Player player2 : PlayerHandler.players) { if (player2 != null) { if (player2.playerName.equalsIgnoreCase(playerToKill)) { foundPlayer = true; + targetX = player2.absX; + targetY = player2.absY; break; } } @@ -471,6 +480,14 @@ public void run() { // Show confirmation dialogue player.setTempString(playerToKill); player.getDialogueHandler().sendDialogues(20000, 2244); + String logMsg = player.playerName + " (mod) used ::forcekill on " + playerToKill + + " at X/Y: " + targetX + "/" + targetY + + " | Mod location X/Y: " + player.absX + "/" + player.absY; + writeLog(player.playerName, "forcekill", logMsg); + System.err.println(logMsg); + if (JavaCord.token != null && JavaCord.api != null && JavaCord.api.getTextChannelById(JavaCord.logChannelId).isPresent()) { + JavaCord.api.getTextChannelById(JavaCord.logChannelId).get().sendMessage(logMsg); + } } } catch (Exception e) { player.getPacketSender().sendMessage("An error occurred."); From 8feb5196532a58e93ef59a9517ef84e9bfca24dd Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Wed, 4 Feb 2026 14:26:32 -0500 Subject: [PATCH 6/6] Fixed forcekill logging --- .../main/java/com/rs2/game/dialogues/DialogueOptions.java | 8 ++++---- .../src/main/java/com/rs2/net/packets/impl/Commands.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java b/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java index dcec4f654..8bfdddf18 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java +++ b/2006Scape Server/src/main/java/com/rs2/game/dialogues/DialogueOptions.java @@ -343,7 +343,7 @@ public static void handleDialogueOptions(Player player, int buttonId) { break; } break; - case 9157:// barrows tele to tunnels + case 9157: if (player.dialogueAction == 20000) { // Yes, proceed with kill String targetName = player.getTempString(); @@ -363,7 +363,7 @@ public static void handleDialogueOptions(Player player, int buttonId) { } else { logMsg = player.playerName + " confirmed ::forcekill on " + player.playerName + " at X/Y: " + player2.absX + "/" + player2.absY; } - writeLog(player.playerName, "forcekill", logMsg); + writeLog(player.playerName, "commands", logMsg); System.err.println(logMsg); if (JavaCord.token != null && JavaCord.api != null && JavaCord.api.getTextChannelById(JavaCord.logChannelId).isPresent()) { JavaCord.api.getTextChannelById(JavaCord.logChannelId).get().sendMessage(logMsg); @@ -378,7 +378,7 @@ public static void handleDialogueOptions(Player player, int buttonId) { } player.getPacketSender().closeAllWindows(); return; - } else if (player.dialogueAction == 1) { + } else if (player.dialogueAction == 1) { // barrows tele to tunnels int r = 4; // int r = Misc.random(3); @@ -719,7 +719,7 @@ else if (player.dialogueAction == 7559) { } else { cancelMsg = player.playerName + " cancelled ::forcekill on themselves at X/Y: " + player.absX + "/" + player.absY; } - writeLog(player.playerName, "forcekill", cancelMsg); + writeLog(player.playerName, "commands", cancelMsg); System.err.println(cancelMsg); if (JavaCord.token != null && JavaCord.api != null && JavaCord.api.getTextChannelById(JavaCord.logChannelId).isPresent()) { JavaCord.api.getTextChannelById(JavaCord.logChannelId).get().sendMessage(cancelMsg); diff --git a/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java b/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java index f42e718e4..13eecd0f1 100644 --- a/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java +++ b/2006Scape Server/src/main/java/com/rs2/net/packets/impl/Commands.java @@ -483,7 +483,7 @@ public void run() { String logMsg = player.playerName + " (mod) used ::forcekill on " + playerToKill + " at X/Y: " + targetX + "/" + targetY + " | Mod location X/Y: " + player.absX + "/" + player.absY; - writeLog(player.playerName, "forcekill", logMsg); + writeLog(player.playerName, "commands", logMsg); System.err.println(logMsg); if (JavaCord.token != null && JavaCord.api != null && JavaCord.api.getTextChannelById(JavaCord.logChannelId).isPresent()) { JavaCord.api.getTextChannelById(JavaCord.logChannelId).get().sendMessage(logMsg);