From 788a5d5c7b564ca0d76ee2c973178605dfca5fde Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 22 Dec 2023 22:56:02 -0500 Subject: [PATCH] clues: include alternatives in treasure chest tag --- .../main/java/net/runelite/api/EnumID.java | 14 +++-- .../plugins/cluescrolls/ClueScrollPlugin.java | 63 +++++++++++++++---- 2 files changed, 58 insertions(+), 19 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/EnumID.java b/runelite-api/src/main/java/net/runelite/api/EnumID.java index 70bf124c9d4..111f694ec66 100644 --- a/runelite-api/src/main/java/net/runelite/api/EnumID.java +++ b/runelite-api/src/main/java/net/runelite/api/EnumID.java @@ -51,12 +51,14 @@ public final class EnumID */ public static final int PETS = 2158; public static final int POH_COSTUME_MEMBERS = 3077; - public static final int POH_COSTUMES_CLUE_BEGINNER = 3293; - public static final int POH_COSTUMES_CLUE_EASY = 3294; - public static final int POH_COSTUMES_CLUE_MEDIUM = 3295; - public static final int POH_COSTUMES_CLUE_HARD = 3296; - public static final int POH_COSTUMES_CLUE_ELITE = 3297; - public static final int POH_COSTUMES_CLUE_MASTER = 3298; + public static final int POH_COSTUME_CLUE_BEGINNER = 3293; + public static final int POH_COSTUME_CLUE_EASY = 3294; + public static final int POH_COSTUME_CLUE_MEDIUM = 3295; + public static final int POH_COSTUME_CLUE_HARD = 3296; + public static final int POH_COSTUME_CLUE_ELITE = 3297; + public static final int POH_COSTUME_CLUE_MASTER = 3298; + public static final int POH_COSTUME_ALTERNATE = 3303; + public static final int POH_COSTUME_ALTERNATES = 3304; public static final int CLAN_RANK_NAME = 3797; public static final int CLAN_RANK_GRAPHIC = 3798; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index 63b18f2b402..08b361d1c49 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -1207,17 +1207,20 @@ else if (c instanceof SkillChallengeClue) return false; } + // from [proc,poh_costumes_countmembers] and [proc,poh_costumes_countalternates] private boolean testTreasureChestTag(int itemId) { EnumComposition members = client.getEnum(EnumID.POH_COSTUME_MEMBERS); EnumComposition[] enums = { - client.getEnum(EnumID.POH_COSTUMES_CLUE_BEGINNER), - client.getEnum(EnumID.POH_COSTUMES_CLUE_EASY), - client.getEnum(EnumID.POH_COSTUMES_CLUE_MEDIUM), - client.getEnum(EnumID.POH_COSTUMES_CLUE_HARD), - client.getEnum(EnumID.POH_COSTUMES_CLUE_ELITE), - client.getEnum(EnumID.POH_COSTUMES_CLUE_MASTER) + client.getEnum(EnumID.POH_COSTUME_CLUE_BEGINNER), + client.getEnum(EnumID.POH_COSTUME_CLUE_EASY), + client.getEnum(EnumID.POH_COSTUME_CLUE_MEDIUM), + client.getEnum(EnumID.POH_COSTUME_CLUE_HARD), + client.getEnum(EnumID.POH_COSTUME_CLUE_ELITE), + client.getEnum(EnumID.POH_COSTUME_CLUE_MASTER) }; + EnumComposition alt = client.getEnum(EnumID.POH_COSTUME_ALTERNATE); + EnumComposition alts = client.getEnum(EnumID.POH_COSTUME_ALTERNATES); for (var tierEnum : enums) { for (int baseItem : tierEnum.getIntVals()) @@ -1228,16 +1231,27 @@ private boolean testTreasureChestTag(int itemId) } int membersEnumId = members.getIntValue(baseItem); - if (membersEnumId == -1) + if (membersEnumId != -1) { - continue; - } + // check members in the group + var memberEnum = client.getEnum(membersEnumId); + for (int memberItem : memberEnum.getIntVals()) + { + if (memberItem == itemId) + { + return true; + } - // check members in the group - var memberEnum = client.getEnum(membersEnumId); - for (int memberItem : memberEnum.getIntVals()) + if (checkAlternates(alt, alts, itemId, memberItem)) + { + return true; + } + } + } + else { - if (memberItem == itemId) + // single member group + if (checkAlternates(alt, alts, itemId, baseItem)) { return true; } @@ -1247,6 +1261,29 @@ private boolean testTreasureChestTag(int itemId) return false; } + private boolean checkAlternates(EnumComposition alt, EnumComposition alts, int targetItemId, int checkItemId) + { + if (alt.getIntValue(checkItemId) == targetItemId) + { + return true; + } + + int altsEnumId = alts.getIntValue(checkItemId); + if (altsEnumId != -1) + { + var e = client.getEnum(altsEnumId); + for (int item : e.getIntVals()) + { + if (item == targetItemId) + { + return true; + } + } + } + + return false; + } + private void updateOverlayMenuEntries() { clueScrollOverlay.removeMenuEntry(RUNELITE_OVERLAY, "Set note", "Clue Scroll overlay");