From 4db9ae33342ed03834aa8c5ac4ea8fb6840fb3ec Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Wed, 27 Dec 2023 21:09:07 -0500 Subject: [PATCH 01/16] Added kill counts with message display --- .../src/main/java/com/rs2/Constants.java | 88 +++++++++++++++++++ .../src/main/java/com/rs2/game/npcs/Npc.java | 4 + .../java/com/rs2/game/npcs/NpcHandler.java | 26 +++++- .../java/com/rs2/game/players/Player.java | 18 ++++ .../java/com/rs2/game/players/PlayerSave.java | 37 ++++++++ .../com/rs2/net/packets/impl/Commands.java | 30 +++++++ 6 files changed, 199 insertions(+), 4 deletions(-) diff --git a/2006Scape Server/src/main/java/com/rs2/Constants.java b/2006Scape Server/src/main/java/com/rs2/Constants.java index 0d83e38ed..07cde605d 100644 --- a/2006Scape Server/src/main/java/com/rs2/Constants.java +++ b/2006Scape Server/src/main/java/com/rs2/Constants.java @@ -1,6 +1,10 @@ package com.rs2; +import com.rs2.game.content.StaticNpcList; + import java.math.BigInteger; +import java.util.Arrays; +import java.util.HashSet; public class Constants { @@ -105,4 +109,88 @@ public class Constants { CRAFTING = 12, SMITHING = 13, MINING = 14, HERBLORE = 15, AGILITY = 16, THIEVING = 17, SLAYER = 18, FARMING = 19, RUNECRAFTING = 20; + + public static final HashSet BOSS_NPC_IDS = new HashSet<>(Arrays.asList( + StaticNpcList.DAGANNOTH_REX, + StaticNpcList.DAGANNOTH_PRIME, + StaticNpcList.DAGANNOTH_SUPREME, + StaticNpcList.KING_BLACK_DRAGON, + StaticNpcList.KALPHITE_QUEEN, + StaticNpcList.GIANT_MOLE, + StaticNpcList.TZTOKJAD + )); + + public static final HashSet SLAYER_NPC_IDS = new HashSet<>(Arrays.asList( + StaticNpcList.CRAWLING_HAND, + StaticNpcList.CRAWLING_HAND_1649, + StaticNpcList.CRAWLING_HAND_1650, + StaticNpcList.CRAWLING_HAND_1651, + StaticNpcList.CRAWLING_HAND_1652, + StaticNpcList.CRAWLING_HAND_1653, + StaticNpcList.CRAWLING_HAND_1654, + StaticNpcList.CRAWLING_HAND_1655, + StaticNpcList.CRAWLING_HAND_1656, + StaticNpcList.CRAWLING_HAND_1657, + StaticNpcList.CAVE_BUG, + StaticNpcList.CAVE_CRAWLER, + StaticNpcList.CAVE_CRAWLER_1601, + StaticNpcList.CAVE_CRAWLER_1602, + StaticNpcList.CAVE_CRAWLER_1603, + StaticNpcList.BANSHEE, + StaticNpcList.CAVE_SLIME, + StaticNpcList.ROCKSLUG, + StaticNpcList.ROCKSLUG_1623, + StaticNpcList.DESERT_LIZARD, + StaticNpcList.DESERT_LIZARD_2805, + StaticNpcList.DESERT_LIZARD_2806, + StaticNpcList.COCKATRICE, + StaticNpcList.COCKATRICE_1621, + StaticNpcList.PYREFIEND, + StaticNpcList.PYREFIEND_1634, + StaticNpcList.PYREFIEND_1635, + StaticNpcList.PYREFIEND_1636, + StaticNpcList.MOGRE, + StaticNpcList.HARPIE_BUG_SWARM, + StaticNpcList.WALL_BEAST, + StaticNpcList.KILLERWATT, + StaticNpcList.KILLERWATT_3202, + StaticNpcList.BASILISK, + StaticNpcList.BASILISK_1617, + StaticNpcList.FEVER_SPIDER, + StaticNpcList.INFERNAL_MAGE, + StaticNpcList.INFERNAL_MAGE_1644, + StaticNpcList.INFERNAL_MAGE_1645, + StaticNpcList.INFERNAL_MAGE_1646, + StaticNpcList.INFERNAL_MAGE_1647, + StaticNpcList.JELLY, + StaticNpcList.JELLY_1638, + StaticNpcList.JELLY_1639, + StaticNpcList.JELLY_1640, + StaticNpcList.JELLY_1641, + StaticNpcList.JELLY_1642, + StaticNpcList.TUROTH, + StaticNpcList.TUROTH_1627, + StaticNpcList.TUROTH_1628, + StaticNpcList.TUROTH_1629, + StaticNpcList.TUROTH_1630, + StaticNpcList.TUROTH_1631, + StaticNpcList.TUROTH_1632, + StaticNpcList.ABERRANT_SPECTER, + StaticNpcList.ABERRANT_SPECTER_1605, + StaticNpcList.ABERRANT_SPECTER_1606, + StaticNpcList.ABERRANT_SPECTER_1607, + StaticNpcList.DUST_DEVIL, + StaticNpcList.KURASK, + StaticNpcList.KURASK_1609, + StaticNpcList.SKELETAL_WYVERN, + StaticNpcList.SKELETAL_WYVERN_3069, + StaticNpcList.SKELETAL_WYVERN_3070, + StaticNpcList.SKELETAL_WYVERN_3071, + StaticNpcList.GARGOYLE, + StaticNpcList.GARGOYLE_1611, + StaticNpcList.NECHRYAEL, + StaticNpcList.ABYSSAL_DEMON, + StaticNpcList.DARK_BEAST, + StaticNpcList.SMOKEDEVIL + )); } \ No newline at end of file diff --git a/2006Scape Server/src/main/java/com/rs2/game/npcs/Npc.java b/2006Scape Server/src/main/java/com/rs2/game/npcs/Npc.java index bd5c4f124..fc0b2e267 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/npcs/Npc.java +++ b/2006Scape Server/src/main/java/com/rs2/game/npcs/Npc.java @@ -65,6 +65,10 @@ public void requestTransform(int id) { transformUpdateRequired = true; updateRequired = true; } + + public String name() { + return NpcHandler.getNpcListName(this.npcType); + } public void shearSheep(Player player, int itemNeeded, int itemGiven, int animation, final int currentId, final int newId, int transformTime) { if (!player.getItemAssistant().playerHasItem(itemNeeded)) { diff --git a/2006Scape Server/src/main/java/com/rs2/game/npcs/NpcHandler.java b/2006Scape Server/src/main/java/com/rs2/game/npcs/NpcHandler.java index 75866c1f2..6f43874c1 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/npcs/NpcHandler.java +++ b/2006Scape Server/src/main/java/com/rs2/game/npcs/NpcHandler.java @@ -331,28 +331,40 @@ public void spawnNpc2(int npcType, int x, int y, int heightLevel, int WalkingTyp npcs[slot] = newNPC; } - private void killedBarrow(int i) { + private boolean killedBarrow(int i) { + boolean barrows = false; Player c = (Client) PlayerHandler.players[npcs[i].killedBy]; if (c != null) { for (int o = 0; o < c.barrowsNpcs.length; o++) { if (npcs[i].npcType == c.barrowsNpcs[o][0]) { c.barrowsNpcs[o][1] = 2; // 2 for dead c.barrowsKillCount++; + barrows = true; + } + } + if (barrows && c.getBarrows().checkBarrows()) { + c.incrementNpcKillCount(100000, 1); + if (c.displayBossKcMessages || c.displayRegularKcMessages) { + c.getPacketSender().sendMessage("Your Barrows Chest count is now: " + c.getNpcKillCount(100000)); } } } + return barrows; } - private void killedCrypt(int i) { + private boolean killedCrypt(int i) { + boolean crypt = false; Player c = (Client) PlayerHandler.players[npcs[i].killedBy]; if (c != null) { for (int o = 0; o < c.barrowCrypt.length; o++) { if (npcs[i].npcType == c.barrowCrypt[o][0]) { c.barrowsKillCount++; c.getPacketSender().sendString("" + c.barrowsKillCount, 4536); + crypt = true; } } } + return crypt; } public void newNPC(int npcType, int x, int y, int heightLevel, @@ -745,10 +757,16 @@ else if (rand <= 20) npcs[i].animUpdateRequired = true; npcs[i].freezeTimer = 0; npcs[i].applyDead = true; - killedBarrow(i); - killedCrypt(i); + boolean barrows = killedBarrow(i); + boolean crypt = killedCrypt(i); npcs[i].actionTimer = 4; // delete time resetPlayersInCombat(i); + if (!crypt && !barrows && c != null) { + c.incrementNpcKillCount(npcs[i].npcType, 1); + if (c.displayRegularKcMessages || (c.displayBossKcMessages && Constants.BOSS_NPC_IDS.contains(npcs[i].npcType)) || (c.displaySlayerKcMessages && Constants.SLAYER_NPC_IDS.contains(npcs[i].npcType))) { + c.getPacketSender().sendMessage("Your " + npcs[i].name() + " kill count is now: " + c.getNpcKillCount(npcs[i].npcType)); + } + } } else if (npcs[i].actionTimer == 0 && npcs[i].applyDead && npcs[i].needRespawn == false) { 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 46fd3c615..6a208a3f4 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 @@ -144,6 +144,24 @@ public abstract class Player { private GateHandler gateHandler = new GateHandler(); private SingleGates singleGates = new SingleGates(); private DoubleGates doubleGates = new DoubleGates(); + + private Map npcKillCounts = new HashMap<>(); + public boolean displayBossKcMessages = true; + public boolean displaySlayerKcMessages = false; + public boolean displayRegularKcMessages = false; + + public int getNpcKillCount(int npcId) { + return npcKillCounts.getOrDefault(npcId, 0); + } + + public Map getNpcKillCounts() { + return npcKillCounts; + } + + public void incrementNpcKillCount(int npcId, int count) { + npcKillCounts.put(npcId, npcKillCounts.getOrDefault(npcId, 0) + count); + } + public int lastMainFrameInterface = -1; //Possibly used in future to prevent packet exploits public int getXPRate() { return xpRate; } diff --git a/2006Scape Server/src/main/java/com/rs2/game/players/PlayerSave.java b/2006Scape Server/src/main/java/com/rs2/game/players/PlayerSave.java index b5984e2c6..4652721c4 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/players/PlayerSave.java +++ b/2006Scape Server/src/main/java/com/rs2/game/players/PlayerSave.java @@ -5,6 +5,7 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Base64; +import java.util.Map; import com.rs2.util.Misc; @@ -436,6 +437,15 @@ public static int loadPlayerInfo(Client player, String playerName, String player case "discord-user-id": player.discordCode = token2; break; + case "display-boss-kc-messages": + player.displayBossKcMessages = Boolean.parseBoolean(token2); + break; + case "display-slayer-kc-messages": + player.displaySlayerKcMessages = Boolean.parseBoolean(token2); + break; + case "display-regular-kc-messages": + player.displayRegularKcMessages = Boolean.parseBoolean(token2); + break; } break; case 3: @@ -477,6 +487,16 @@ public static int loadPlayerInfo(Client player, String playerName, String player if (token.equals("character-ignore")) { player.ignores[Integer.parseInt(token3[0])] = Long.parseLong(token3[1]); } + case 10: + if (token.startsWith("npcid-")) { + try { + int npcId = Integer.parseInt(token.substring(6)); + int killCount = Integer.parseInt(token2); + player.incrementNpcKillCount(npcId, killCount); + } catch (NumberFormatException e) { + System.out.println("Error parsing NPC kill count for " + token); + } + } break; } } else { @@ -508,6 +528,9 @@ public static int loadPlayerInfo(Client player, String playerName, String player case "[IGNORES]": ReadMode = 9; break; + case "[NPC-KILLS]": + ReadMode = 10; + break; case "[EOF]": try { characterfile.close(); @@ -828,6 +851,12 @@ public static boolean saveGame(Player player) { characterfile.newLine(); characterfile.write("discord-user-id = " + player.discordCode); characterfile.newLine(); + characterfile.write("display-boss-kc-messages = " + player.displayBossKcMessages); + characterfile.newLine(); + characterfile.write("display-slayer-kc-messages = " + player.displaySlayerKcMessages); + characterfile.newLine(); + characterfile.write("display-regular-kc-messages = " + player.displayRegularKcMessages); + characterfile.newLine(); characterfile.newLine(); /* EQUIPMENT */ @@ -900,6 +929,14 @@ public static boolean saveGame(Player player) { } characterfile.newLine(); + characterfile.write("[NPC-KILLS]"); + characterfile.newLine(); + for (Map.Entry entry : player.getNpcKillCounts().entrySet()) { + characterfile.write("npcid-" + entry.getKey() + " = " + entry.getValue()); + characterfile.newLine(); + } + characterfile.newLine(); + /* EOF */ characterfile.write("[EOF]"); characterfile.newLine(); 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 72ff79752..255d300b6 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 @@ -219,6 +219,27 @@ public void run() { case "prayer": player.getPacketSender().sendMessage(String.format("Prayer points: %d", player.playerLevel[Constants.PRAYER])); break; + case "togglenpckillmsgs": + case "togglenpckillmsg": + case "togglenpckcmsgs": + case "togglenpckcmsg": + player.displayRegularKcMessages = !player.displayRegularKcMessages; + player.getPacketSender().sendMessage("You now have regular NPC kill count messages: " + (player.displayRegularKcMessages ? "enabled" : "disabled")); + break; + case "togglebosskillmsgs": + case "togglebosskillmsg": + case "togglebossksmsgs": + case "togglebossksmsg": + player.displayBossKcMessages = !player.displayBossKcMessages; + player.getPacketSender().sendMessage("You now have boss NPC kill count messages: " + (player.displayBossKcMessages ? "enabled" : "disabled")); + break; + case "toggleslayerkillmsgs": + case "toggleslayerkillmsg": + case "toggleslayerkcmsgs": + case "toggleslayerkcmsg": + player.displaySlayerKcMessages = !player.displaySlayerKcMessages; + player.getPacketSender().sendMessage("You now have slayer NPC kill count messages: " + (player.displaySlayerKcMessages ? "enabled" : "disabled")); + break; case "snow": Calendar date = new GregorianCalendar(); if ((date.get(Calendar.MONTH) + 1) == 12 && !player.inWild()) { @@ -315,6 +336,15 @@ public void run() { "::withdrawshop(::wshop)", "Withdraw profits from player owned shop", "", + "::togglenpckillmsgs(::togglenpckcmsgs)", + "Toggle regular NPC kill count message display","", + "", + "::togglebosskillmsgs(::togglebosskcmsgs)", + "Toggle regular Boss kill count message display","", + "", + "::toggleslayerkillmsgs(::toggleslayerkcmsgs)", + "Toggle regular Slayer kill count message display", + "", "::snow", "Add some snow in your mainscreen(works only in december)", (Constants.VARIABLE_XP_RATE ? "\\n" + "::xprate\\n" + "Opens dialogue for the player to set/increase their XP rate." : ""), From a0d834c868bfa1db2b2b39140cf3076cb8995173 Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sat, 30 Dec 2023 14:42:55 -0500 Subject: [PATCH 02/16] Fixed barrows chest count --- .../main/java/com/rs2/game/content/minigames/Barrows.java | 4 ++++ .../src/main/java/com/rs2/game/npcs/NpcHandler.java | 6 ------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/2006Scape Server/src/main/java/com/rs2/game/content/minigames/Barrows.java b/2006Scape Server/src/main/java/com/rs2/game/content/minigames/Barrows.java index 2cb4a5b39..ad12c87ba 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/content/minigames/Barrows.java +++ b/2006Scape Server/src/main/java/com/rs2/game/content/minigames/Barrows.java @@ -230,6 +230,10 @@ public void useChest() { } if (c.barrowsKillCount > 5 && checkBarrows()) { if (c.getItemAssistant().freeSlots() >= 4) { + c.incrementNpcKillCount(100000, 1); + if (c.displayBossKcMessages || c.displayRegularKcMessages) { + c.getPacketSender().sendMessage("Your Barrows Chest count is now: " + c.getNpcKillCount(100000)); + } reward(); resetBarrows(); } else { diff --git a/2006Scape Server/src/main/java/com/rs2/game/npcs/NpcHandler.java b/2006Scape Server/src/main/java/com/rs2/game/npcs/NpcHandler.java index 6f43874c1..909d1a750 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/npcs/NpcHandler.java +++ b/2006Scape Server/src/main/java/com/rs2/game/npcs/NpcHandler.java @@ -342,12 +342,6 @@ private boolean killedBarrow(int i) { barrows = true; } } - if (barrows && c.getBarrows().checkBarrows()) { - c.incrementNpcKillCount(100000, 1); - if (c.displayBossKcMessages || c.displayRegularKcMessages) { - c.getPacketSender().sendMessage("Your Barrows Chest count is now: " + c.getNpcKillCount(100000)); - } - } } return barrows; } From 4a96399ba2438f632319e217430b1071c8c8889f Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sat, 30 Dec 2023 18:23:54 -0500 Subject: [PATCH 03/16] Preserve insertion order of NPC IDs for Constants --- 2006Scape Server/src/main/java/com/rs2/Constants.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/2006Scape Server/src/main/java/com/rs2/Constants.java b/2006Scape Server/src/main/java/com/rs2/Constants.java index 07cde605d..bcc6daf05 100644 --- a/2006Scape Server/src/main/java/com/rs2/Constants.java +++ b/2006Scape Server/src/main/java/com/rs2/Constants.java @@ -5,6 +5,7 @@ import java.math.BigInteger; import java.util.Arrays; import java.util.HashSet; +import java.util.LinkedHashSet; public class Constants { @@ -110,7 +111,7 @@ public class Constants { AGILITY = 16, THIEVING = 17, SLAYER = 18, FARMING = 19, RUNECRAFTING = 20; - public static final HashSet BOSS_NPC_IDS = new HashSet<>(Arrays.asList( + public static final LinkedHashSet BOSS_NPC_IDS = new LinkedHashSet<>(Arrays.asList( StaticNpcList.DAGANNOTH_REX, StaticNpcList.DAGANNOTH_PRIME, StaticNpcList.DAGANNOTH_SUPREME, @@ -120,7 +121,7 @@ public class Constants { StaticNpcList.TZTOKJAD )); - public static final HashSet SLAYER_NPC_IDS = new HashSet<>(Arrays.asList( + public static final LinkedHashSet SLAYER_NPC_IDS = new LinkedHashSet<>(Arrays.asList( StaticNpcList.CRAWLING_HAND, StaticNpcList.CRAWLING_HAND_1649, StaticNpcList.CRAWLING_HAND_1650, From cfc81d5825976ba991c50ef100aa463c40b33c2a Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sat, 30 Dec 2023 18:24:06 -0500 Subject: [PATCH 04/16] Added KC command and interfaces --- .../com/rs2/net/packets/impl/Commands.java | 79 ++++++++++++++++++- 1 file changed, 78 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 255d300b6..78a3b3e26 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 @@ -2,12 +2,13 @@ import static com.rs2.util.GameLogger.writeLog; -import java.util.Arrays; +import java.util.*; import com.rs2.Connection; import com.rs2.Constants; import com.rs2.GameEngine; import com.rs2.game.bots.BotHandler; +import com.rs2.game.npcs.NPCDefinition; import com.rs2.game.npcs.NpcHandler; import com.rs2.game.players.*; import com.rs2.game.players.antimacro.AntiSpam; @@ -240,6 +241,82 @@ public void run() { player.displaySlayerKcMessages = !player.displaySlayerKcMessages; player.getPacketSender().sendMessage("You now have slayer NPC kill count messages: " + (player.displaySlayerKcMessages ? "enabled" : "disabled")); break; + case "kc": + case "kills": + case "checknpckill": + case "checknpckills": + if (arguments.length > 0) { + // Combine all arguments into a single string, assuming space-separated + String npcNameInput = String.join(" ", arguments).toLowerCase(); + + try { + // Try to parse as an ID + int npcId = Integer.parseInt(arguments[0]); + int killCount = player.getNpcKillCounts().getOrDefault(npcId, 0); + String npcName = NPCDefinition.forId(npcId).getName(); + player.getPacketSender().sendMessage("Kill count for " + npcName + ": " + killCount); + } catch (NumberFormatException e) { + // If not an ID, treat as a name + List matchingDefs = new ArrayList<>(); + for (int id = 0; id <= 3789; id++) { // Assuming 3790 is the max ID + NPCDefinition def = NPCDefinition.forId(id); + if (def.getName().toLowerCase().startsWith(npcNameInput)) { + matchingDefs.add(def); + } + } + if (matchingDefs.isEmpty()) { + player.getPacketSender().sendMessage("No NPCs found with the name: " + npcNameInput); + } else { + boolean empty = true; + for (NPCDefinition def : matchingDefs) { + int killCount = player.getNpcKillCounts().getOrDefault(def.getId(), 0); + if (killCount > 0) { + empty = false; + player.getPacketSender().sendMessage("Kill count for " + def.getName() + " (ID: " + def.getId() + "): " + killCount); + } + } + if (empty) { + player.getPacketSender().sendMessage("Kill count for " + npcNameInput + ": 0"); + } + } + } + } else { + player.getPacketSender().sendMessage("Please provide an NPC ID or name."); + } + break; + case "bosskillcounts": + // Clear all lines + for (int i = 8144; i < 8195; i++) { + player.getPacketSender().sendString("", i); + } + + player.getPacketSender().sendString("@dre@Boss Kill Counts", 8144); + int bossLineId = 8147; // Starting line for display + player.getPacketSender().sendString("Barrows Chests: " + player.getNpcKillCounts().getOrDefault(100000, 0), bossLineId++); + for (Integer bossId : Constants.BOSS_NPC_IDS) { + int killCount = player.getNpcKillCounts().getOrDefault(bossId, 0); + String npcName = NPCDefinition.forId(bossId).getName(); + player.getPacketSender().sendString(npcName + ": " + killCount, bossLineId++); + } + + player.getPacketSender().showInterface(8134); + break; + case "slayerkillcounts": + // Clear all lines + for (int i = 8144; i < 8195; i++) { + player.getPacketSender().sendString("", i); + } + + player.getPacketSender().sendString("@dre@Slayer Kill Counts", 8144); + int slayerLineId = 8147; // Starting line for display + for (Integer bossId : Constants.SLAYER_NPC_IDS) { + int killCount = player.getNpcKillCounts().getOrDefault(bossId, 0); + String npcName = NPCDefinition.forId(bossId).getName(); + player.getPacketSender().sendString(npcName + ": " + killCount, slayerLineId++); + } + + player.getPacketSender().showInterface(8134); + break; case "snow": Calendar date = new GregorianCalendar(); if ((date.get(Calendar.MONTH) + 1) == 12 && !player.inWild()) { From 3dc48269ec10c8efc572b85bf36cb109272fe815 Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sat, 30 Dec 2023 18:38:19 -0500 Subject: [PATCH 05/16] Added more robustness to KC command --- .../java/com/rs2/net/packets/impl/Commands.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 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 78a3b3e26..0fd8d2349 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 @@ -248,7 +248,6 @@ public void run() { if (arguments.length > 0) { // Combine all arguments into a single string, assuming space-separated String npcNameInput = String.join(" ", arguments).toLowerCase(); - try { // Try to parse as an ID int npcId = Integer.parseInt(arguments[0]); @@ -258,10 +257,15 @@ public void run() { } catch (NumberFormatException e) { // If not an ID, treat as a name List matchingDefs = new ArrayList<>(); - for (int id = 0; id <= 3789; id++) { // Assuming 3790 is the max ID - NPCDefinition def = NPCDefinition.forId(id); - if (def.getName().toLowerCase().startsWith(npcNameInput)) { - matchingDefs.add(def); + for (int id = 0; id <= 3789; id++) { + try { + NPCDefinition def = NPCDefinition.forId(id); + if (def.getName().toLowerCase().startsWith(npcNameInput)) { + matchingDefs.add(def); + } + } catch (Exception exception) { + System.err.println("Exception during kc command: " + exception.getMessage()); + break; } } if (matchingDefs.isEmpty()) { From 4ec4df38b77b1f8cbe89aa1bff8312f9edae7751 Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sat, 30 Dec 2023 18:40:06 -0500 Subject: [PATCH 06/16] Added alias and documentation to new commands --- .../java/com/rs2/net/packets/impl/Commands.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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 0fd8d2349..47aa5d266 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 @@ -289,6 +289,8 @@ public void run() { } break; case "bosskillcounts": + case "bosskillcount": + case "bosskc": // Clear all lines for (int i = 8144; i < 8195; i++) { player.getPacketSender().sendString("", i); @@ -306,6 +308,8 @@ public void run() { player.getPacketSender().showInterface(8134); break; case "slayerkillcounts": + case "slayerkillcount": + case "slayerkc": // Clear all lines for (int i = 8144; i < 8195; i++) { player.getPacketSender().sendString("", i); @@ -426,6 +430,15 @@ public void run() { "::toggleslayerkillmsgs(::toggleslayerkcmsgs)", "Toggle regular Slayer kill count message display", "", + "::kc(::checknpckills)", + "Search for your NPC kills for an NPC name or ID", + "", + "::bosskc(::toggleslayerkcmsgs)", + "View your boss kills", + "", + "::slayerkc(::toggleslayerkcmsgs)", + "View your slayer kills", + "", "::snow", "Add some snow in your mainscreen(works only in december)", (Constants.VARIABLE_XP_RATE ? "\\n" + "::xprate\\n" + "Opens dialogue for the player to set/increase their XP rate." : ""), From a9cb7fdeadf44b3aa96f237cfa077dc77fe54b1f Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sat, 30 Dec 2023 18:45:17 -0500 Subject: [PATCH 07/16] Added more aliases for new commands --- .../src/main/java/com/rs2/net/packets/impl/Commands.java | 2 ++ 1 file changed, 2 insertions(+) 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 47aa5d266..ddb4c6618 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 @@ -291,6 +291,7 @@ public void run() { case "bosskillcounts": case "bosskillcount": case "bosskc": + case "kcboss": // Clear all lines for (int i = 8144; i < 8195; i++) { player.getPacketSender().sendString("", i); @@ -310,6 +311,7 @@ public void run() { case "slayerkillcounts": case "slayerkillcount": case "slayerkc": + case "kcslayer": // Clear all lines for (int i = 8144; i < 8195; i++) { player.getPacketSender().sendString("", i); From b1d17f1278ea5183e9970111bddd34e97884a794 Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sat, 30 Dec 2023 18:50:40 -0500 Subject: [PATCH 08/16] Merged slayer KC interface names --- .../com/rs2/net/packets/impl/Commands.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 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 ddb4c6618..83549d7d9 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 @@ -319,12 +319,22 @@ public void run() { player.getPacketSender().sendString("@dre@Slayer Kill Counts", 8144); int slayerLineId = 8147; // Starting line for display - for (Integer bossId : Constants.SLAYER_NPC_IDS) { - int killCount = player.getNpcKillCounts().getOrDefault(bossId, 0); - String npcName = NPCDefinition.forId(bossId).getName(); - player.getPacketSender().sendString(npcName + ": " + killCount, slayerLineId++); + + // HashMap to store cumulative kills by NPC name + HashMap nameToKills = new HashMap<>(); + + // Populate the HashMap + for (Integer npcId : Constants.SLAYER_NPC_IDS) { + String npcName = NPCDefinition.forId(npcId).getName(); + int killCount = player.getNpcKillCounts().getOrDefault(npcId, 0); + nameToKills.put(npcName, nameToKills.getOrDefault(npcName, 0) + killCount); } - + + // Display the results + for (Map.Entry entry : nameToKills.entrySet()) { + player.getPacketSender().sendString(entry.getKey() + ": " + entry.getValue(), slayerLineId++); + } + player.getPacketSender().showInterface(8134); break; case "snow": From e62c31c14f24b155ca86360ffc3ef0a439698602 Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sat, 30 Dec 2023 19:11:09 -0500 Subject: [PATCH 09/16] Preserve slayerkc nameToKills insertion order and formatting fix --- .../java/com/rs2/net/packets/impl/Commands.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 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 83549d7d9..9e1f0ee99 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 @@ -296,7 +296,7 @@ public void run() { for (int i = 8144; i < 8195; i++) { player.getPacketSender().sendString("", i); } - + player.getPacketSender().sendString("@dre@Boss Kill Counts", 8144); int bossLineId = 8147; // Starting line for display player.getPacketSender().sendString("Barrows Chests: " + player.getNpcKillCounts().getOrDefault(100000, 0), bossLineId++); @@ -316,25 +316,25 @@ public void run() { for (int i = 8144; i < 8195; i++) { player.getPacketSender().sendString("", i); } - + player.getPacketSender().sendString("@dre@Slayer Kill Counts", 8144); int slayerLineId = 8147; // Starting line for display - + // HashMap to store cumulative kills by NPC name - HashMap nameToKills = new HashMap<>(); - + LinkedHashMap nameToKills = new LinkedHashMap<>(); + // Populate the HashMap for (Integer npcId : Constants.SLAYER_NPC_IDS) { String npcName = NPCDefinition.forId(npcId).getName(); int killCount = player.getNpcKillCounts().getOrDefault(npcId, 0); nameToKills.put(npcName, nameToKills.getOrDefault(npcName, 0) + killCount); } - + // Display the results for (Map.Entry entry : nameToKills.entrySet()) { player.getPacketSender().sendString(entry.getKey() + ": " + entry.getValue(), slayerLineId++); } - + player.getPacketSender().showInterface(8134); break; case "snow": From b029f42a4bf527fb05f9e631d96cf2a6348d9c95 Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sat, 30 Dec 2023 19:23:08 -0500 Subject: [PATCH 10/16] Updated comment --- .../src/main/java/com/rs2/net/packets/impl/Commands.java | 2 +- 1 file changed, 1 insertion(+), 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 9e1f0ee99..d79d55f48 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 @@ -320,7 +320,7 @@ public void run() { player.getPacketSender().sendString("@dre@Slayer Kill Counts", 8144); int slayerLineId = 8147; // Starting line for display - // HashMap to store cumulative kills by NPC name + // LinkedHashMap to store cumulative kills by NPC name LinkedHashMap nameToKills = new LinkedHashMap<>(); // Populate the HashMap From 9d7790eb562418353118e4276f56fd8f957ea155 Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sun, 31 Dec 2023 11:33:07 -0500 Subject: [PATCH 11/16] Added missing boss NPC id --- 2006Scape Server/src/main/java/com/rs2/Constants.java | 1 + 1 file changed, 1 insertion(+) diff --git a/2006Scape Server/src/main/java/com/rs2/Constants.java b/2006Scape Server/src/main/java/com/rs2/Constants.java index bcc6daf05..cb894aff6 100644 --- a/2006Scape Server/src/main/java/com/rs2/Constants.java +++ b/2006Scape Server/src/main/java/com/rs2/Constants.java @@ -112,6 +112,7 @@ public class Constants { RUNECRAFTING = 20; public static final LinkedHashSet BOSS_NPC_IDS = new LinkedHashSet<>(Arrays.asList( + StaticNpcList.CHAOS_ELEMENTAL, StaticNpcList.DAGANNOTH_REX, StaticNpcList.DAGANNOTH_PRIME, StaticNpcList.DAGANNOTH_SUPREME, From f9c61cebebb6265bce6200e42f58f6e2a504b15f Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sun, 31 Dec 2023 11:34:35 -0500 Subject: [PATCH 12/16] Moved giant mole up in set --- 2006Scape Server/src/main/java/com/rs2/Constants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2006Scape Server/src/main/java/com/rs2/Constants.java b/2006Scape Server/src/main/java/com/rs2/Constants.java index cb894aff6..d04a2d913 100644 --- a/2006Scape Server/src/main/java/com/rs2/Constants.java +++ b/2006Scape Server/src/main/java/com/rs2/Constants.java @@ -116,9 +116,9 @@ public class Constants { StaticNpcList.DAGANNOTH_REX, StaticNpcList.DAGANNOTH_PRIME, StaticNpcList.DAGANNOTH_SUPREME, + StaticNpcList.GIANT_MOLE, StaticNpcList.KING_BLACK_DRAGON, StaticNpcList.KALPHITE_QUEEN, - StaticNpcList.GIANT_MOLE, StaticNpcList.TZTOKJAD )); From 75d64e3eabcc18847bcd80f3b2f478a662974975 Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Mon, 1 Jan 2024 16:21:08 -0500 Subject: [PATCH 13/16] Emptied out quest interface properly for kc --- .../java/com/rs2/net/packets/impl/Commands.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 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 d79d55f48..46033f31b 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 @@ -293,7 +293,13 @@ public void run() { case "bosskc": case "kcboss": // Clear all lines - for (int i = 8144; i < 8195; i++) { + for (int i = 8144; i < 8196; i++) { + player.getPacketSender().sendString("", i); + } + for (int i = 12174; i < (12174 + 50); i++) { + player.getPacketSender().sendString("", i); + } + for (int i = 14945; i < (14945 + 100); i++) { player.getPacketSender().sendString("", i); } @@ -313,7 +319,13 @@ public void run() { case "slayerkc": case "kcslayer": // Clear all lines - for (int i = 8144; i < 8195; i++) { + for (int i = 8144; i < 8196; i++) { + player.getPacketSender().sendString("", i); + } + for (int i = 12174; i < (12174 + 50); i++) { + player.getPacketSender().sendString("", i); + } + for (int i = 14945; i < (14945 + 100); i++) { player.getPacketSender().sendString("", i); } From 65b995713818c1ab066febe57eb2062e3db8f2f6 Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sat, 6 Jan 2024 16:37:38 -0500 Subject: [PATCH 14/16] Fixed whitespace --- .../main/java/com/rs2/game/content/minigames/Barrows.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/2006Scape Server/src/main/java/com/rs2/game/content/minigames/Barrows.java b/2006Scape Server/src/main/java/com/rs2/game/content/minigames/Barrows.java index ad12c87ba..26cbe976d 100644 --- a/2006Scape Server/src/main/java/com/rs2/game/content/minigames/Barrows.java +++ b/2006Scape Server/src/main/java/com/rs2/game/content/minigames/Barrows.java @@ -230,10 +230,10 @@ public void useChest() { } if (c.barrowsKillCount > 5 && checkBarrows()) { if (c.getItemAssistant().freeSlots() >= 4) { - c.incrementNpcKillCount(100000, 1); - if (c.displayBossKcMessages || c.displayRegularKcMessages) { - c.getPacketSender().sendMessage("Your Barrows Chest count is now: " + c.getNpcKillCount(100000)); - } + c.incrementNpcKillCount(100000, 1); + if (c.displayBossKcMessages || c.displayRegularKcMessages) { + c.getPacketSender().sendMessage("Your Barrows Chest count is now: " + c.getNpcKillCount(100000)); + } reward(); resetBarrows(); } else { From 8d712aca5f9171cb451994428db5bfd0e6136ad7 Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Sun, 14 Jan 2024 17:15:25 -0500 Subject: [PATCH 15/16] Fixed formatting --- .../src/main/java/com/rs2/game/players/Player.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 6a208a3f4..81786ebac 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 @@ -151,12 +151,12 @@ public abstract class Player { public boolean displayRegularKcMessages = false; public int getNpcKillCount(int npcId) { - return npcKillCounts.getOrDefault(npcId, 0); - } + return npcKillCounts.getOrDefault(npcId, 0); + } public Map getNpcKillCounts() { - return npcKillCounts; - } + return npcKillCounts; + } public void incrementNpcKillCount(int npcId, int count) { npcKillCounts.put(npcId, npcKillCounts.getOrDefault(npcId, 0) + count); From 71afa4e569ba3cf923c867570d6db044291cde42 Mon Sep 17 00:00:00 2001 From: ipkpjersi Date: Fri, 20 Sep 2024 21:38:30 -0400 Subject: [PATCH 16/16] Hide boss KC messages by default --- 2006Scape Server/src/main/java/com/rs2/game/players/Player.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 81786ebac..53d25673a 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 @@ -146,7 +146,7 @@ public abstract class Player { private DoubleGates doubleGates = new DoubleGates(); private Map npcKillCounts = new HashMap<>(); - public boolean displayBossKcMessages = true; + public boolean displayBossKcMessages = false; public boolean displaySlayerKcMessages = false; public boolean displayRegularKcMessages = false;