From f01dce648a7dd18f7315aee2a54c8c88575d026c Mon Sep 17 00:00:00 2001 From: SirGirion Date: Sat, 26 Sep 2020 18:06:19 -0400 Subject: [PATCH] loot tracker: add bird houses --- .../loottracker/LootTrackerPlugin.java | 32 +++++++++++++++++++ .../loottracker/LootTrackerPluginTest.java | 25 +++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java index 0641f74e44..2daad6bda2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java @@ -201,6 +201,20 @@ public class LootTrackerPlugin extends Plugin private static final String BIRDNEST_EVENT = "Bird nest"; private static final Set BIRDNEST_IDS = ImmutableSet.of(ItemID.BIRD_NEST, ItemID.BIRD_NEST_5071, ItemID.BIRD_NEST_5072, ItemID.BIRD_NEST_5073, ItemID.BIRD_NEST_5074, ItemID.BIRD_NEST_7413, ItemID.BIRD_NEST_13653, ItemID.BIRD_NEST_22798, ItemID.BIRD_NEST_22800); + // Birdhouses + private static final Pattern BIRDHOUSE_PATTERN = Pattern.compile("You dismantle and discard the trap, retrieving (?:(?:a|\\d{1,2}) nests?, )?10 dead birds, \\d{1,3} feathers and (\\d,?\\d{1,3}) Hunter XP\\."); + private static final Map BIRDHOUSE_XP_TO_TYPE = new ImmutableMap.Builder(). + put(280, "Regular Bird House"). + put(420, "Oak Bird House"). + put(560, "Willow Bird House"). + put(700, "Teak Bird House"). + put(820, "Maple Bird House"). + put(960, "Mahogany Bird House"). + put(1020, "Yew Bird House"). + put(1140, "Magic Bird House"). + put(1200, "Redwood Bird House"). + build(); + /* * This map is used when a pickpocket target has a different name in the chat message than their in-game name. * Note that if the two NPCs can be found in the same place, there is a chance of race conditions @@ -708,6 +722,23 @@ public class LootTrackerPlugin extends Plugin { // Player didn't have the key they needed. resetEvent(); + return; + } + + // Check if message is a birdhouse type + final Matcher matcher = BIRDHOUSE_PATTERN.matcher(message); + if (matcher.matches()) + { + final int xp = Integer.parseInt(matcher.group(1)); + final String type = BIRDHOUSE_XP_TO_TYPE.get(xp); + if (type == null) + { + log.debug("Unknown bird house type {}", xp); + return; + } + + setEvent(LootRecordType.EVENT, type, client.getRealSkillLevel(Skill.HUNTER)); + takeInventorySnapshot(); } } @@ -728,6 +759,7 @@ public class LootTrackerPlugin extends Plugin || SEEDPACK_EVENT.equals(eventType) || CASKET_EVENT.equals(eventType) || BIRDNEST_EVENT.equals(eventType) + || eventType.endsWith("Bird House") || eventType.startsWith("H.A.M. chest") || lootRecordType == LootRecordType.PICKPOCKET) { diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/loottracker/LootTrackerPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/loottracker/LootTrackerPluginTest.java index 12f6e4d990..52a7e5fd6d 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/loottracker/LootTrackerPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/loottracker/LootTrackerPluginTest.java @@ -289,4 +289,29 @@ public class LootTrackerPluginTest QueuedMessage queuedMessage = captor.getValue(); assertEquals("Your loot is worth around 60,021,020 coins.", queuedMessage.getRuneLiteFormattedMessage()); } + + @Test + public void testBirdhouses() + { + // No bird nests + ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.SPAM, "", "You dismantle and discard the trap, retrieving 10 dead birds, 30 feathers and 1140 Hunter XP.", "", 0); + lootTrackerPlugin.onChatMessage(chatMessage); + + assertEquals("Magic Bird House", lootTrackerPlugin.eventType); + assertEquals(LootRecordType.EVENT, lootTrackerPlugin.lootRecordType); + + // Single bird nest + chatMessage = new ChatMessage(null, ChatMessageType.SPAM, "", "You dismantle and discard the trap, retrieving a nest, 10 dead birds, 50 feathers and 700 Hunter XP.", "", 0); + lootTrackerPlugin.onChatMessage(chatMessage); + + assertEquals("Teak Bird House", lootTrackerPlugin.eventType); + assertEquals(LootRecordType.EVENT, lootTrackerPlugin.lootRecordType); + + // Multiple nests + chatMessage = new ChatMessage(null, ChatMessageType.SPAM, "", "You dismantle and discard the trap, retrieving 2 nests, 10 dead birds, 40 feathers and 280 Hunter XP.", "", 0); + lootTrackerPlugin.onChatMessage(chatMessage); + + assertEquals("Regular Bird House", lootTrackerPlugin.eventType); + assertEquals(LootRecordType.EVENT, lootTrackerPlugin.lootRecordType); + } }