diff --git a/http-api/src/main/java/net/runelite/http/api/loottracker/LootRecord.java b/http-api/src/main/java/net/runelite/http/api/loottracker/LootRecord.java index 01e180c55b..a8e04aefd3 100644 --- a/http-api/src/main/java/net/runelite/http/api/loottracker/LootRecord.java +++ b/http-api/src/main/java/net/runelite/http/api/loottracker/LootRecord.java @@ -40,4 +40,5 @@ public class LootRecord private Object metadata; private Collection drops; private Instant time; + private Integer world; } diff --git a/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java b/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java index 4e0ca89965..f2b1a1f21b 100644 --- a/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java +++ b/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java @@ -44,12 +44,16 @@ import lombok.RequiredArgsConstructor; import lombok.Value; import lombok.extern.slf4j.Slf4j; import net.runelite.client.util.ReflectUtil; +import org.slf4j.Marker; +import org.slf4j.MarkerFactory; @Slf4j @RequiredArgsConstructor @ThreadSafe public class EventBus { + private static final Marker DEDUPLICATE = MarkerFactory.getMarker("DEDUPLICATE"); + @Value public static class Subscriber { @@ -82,7 +86,7 @@ public class EventBus */ public EventBus() { - this((e) -> log.warn("Uncaught exception in event subscriber", e)); + this((e) -> log.warn(DEDUPLICATE, "Uncaught exception in event subscriber", e)); } /** diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java b/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java index e638eef3af..a194854faa 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java @@ -196,6 +196,7 @@ public enum ItemMapping ITEM_SANGUINESTI_STAFF(SANGUINESTI_STAFF_UNCHARGED, SANGUINESTI_STAFF, HOLY_SANGUINESTI_STAFF_UNCHARGED, HOLY_SANGUINESTI_STAFF), ITEM_SCYTHE_OF_VITUR(SCYTHE_OF_VITUR_UNCHARGED, SCYTHE_OF_VITUR, HOLY_SCYTHE_OF_VITUR_UNCHARGED, HOLY_SCYTHE_OF_VITUR, SANGUINE_SCYTHE_OF_VITUR_UNCHARGED, SANGUINE_SCYTHE_OF_VITUR), ITEM_TOME_OF_FIRE(TOME_OF_FIRE_EMPTY, TOME_OF_FIRE), + ITEM_TOME_OF_WATER(TOME_OF_WATER_EMPTY, TOME_OF_WATER), ITEM_CRAWS_BOW(CRAWS_BOW_U, CRAWS_BOW), ITEM_VIGGORAS_CHAINMACE(VIGGORAS_CHAINMACE_U, VIGGORAS_CHAINMACE), ITEM_THAMMARONS_SCEPTRE(THAMMARONS_SCEPTRE_U, THAMMARONS_SCEPTRE), @@ -255,6 +256,7 @@ public enum ItemMapping ITEM_VOLATILE_ORB(VOLATILE_ORB, VOLATILE_NIGHTMARE_STAFF), ITEM_NIGHTMARE_STAFF(NIGHTMARE_STAFF, ELDRITCH_NIGHTMARE_STAFF, HARMONISED_NIGHTMARE_STAFF, VOLATILE_NIGHTMARE_STAFF), ITEM_GHARZI_RAPIER(GHRAZI_RAPIER, HOLY_GHRAZI_RAPIER), + ITEM_MASTER_SCROLL_BOOK(MASTER_SCROLL_BOOK_EMPTY, MASTER_SCROLL_BOOK), // Trouver Parchment ITEM_TROUVER_PARCHMENT( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java index f0248b19be..16da3c9460 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java @@ -50,6 +50,7 @@ import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; import lombok.AccessLevel; import lombok.Getter; +import net.runelite.api.ItemID; import net.runelite.client.game.ItemManager; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.FontManager; @@ -375,8 +376,32 @@ class LootTrackerBox extends JPanel final long gePrice = item.getTotalGePrice(); final long haPrice = item.getTotalHaPrice(); final String ignoredLabel = item.isIgnored() ? " - Ignored" : ""; - return "" + name + " x " + quantity + ignoredLabel - + "
GE: " + QuantityFormatter.quantityToStackSize(gePrice) - + "
HA: " + QuantityFormatter.quantityToStackSize(haPrice) + ""; + final StringBuilder sb = new StringBuilder(""); + sb.append(name).append(" x ").append(QuantityFormatter.formatNumber(quantity)).append(ignoredLabel); + if (item.getId() == ItemID.COINS_995) + { + sb.append(""); + return sb.toString(); + } + + sb.append("
GE: ").append(QuantityFormatter.quantityToStackSize(gePrice)); + if (quantity > 1) + { + sb.append(" (").append(QuantityFormatter.quantityToStackSize(item.getGePrice())).append(" ea)"); + } + + if (item.getId() == ItemID.PLATINUM_TOKEN) + { + sb.append(""); + return sb.toString(); + } + + sb.append("
HA: ").append(QuantityFormatter.quantityToStackSize(haPrice)); + if (quantity > 1) + { + sb.append(" (").append(QuantityFormatter.quantityToStackSize(item.getHaPrice())).append(" ea)"); + } + sb.append(""); + return sb.toString(); } } 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 634a1fcc77..5519be978a 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 @@ -74,6 +74,7 @@ import net.runelite.api.ObjectID; import net.runelite.api.Player; import net.runelite.api.Skill; import net.runelite.api.SpriteID; +import net.runelite.api.WorldType; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameStateChanged; @@ -479,7 +480,7 @@ public class LootTrackerPlugin extends Plugin if (config.saveLoot()) { - LootRecord lootRecord = new LootRecord(name, type, metadata, toGameItems(items), Instant.now()); + LootRecord lootRecord = new LootRecord(name, type, metadata, toGameItems(items), Instant.now(), getLootWorldId()); synchronized (queuedLoots) { queuedLoots.add(lootRecord); @@ -489,6 +490,12 @@ public class LootTrackerPlugin extends Plugin eventBus.post(new LootReceived(name, combatLevel, type, items)); } + private Integer getLootWorldId() + { + // For the wiki to determine drop rates based on dmm brackets + return client.getWorldType().contains(WorldType.SEASONAL) ? client.getWorld() : null; + } + @Subscribe public void onNpcLootReceived(final NpcLootReceived npcLootReceived) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java index 6cc0e90ae4..67edf4a1e5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java @@ -50,6 +50,10 @@ import static net.runelite.api.ObjectID.ORE_VEIN_26661; import static net.runelite.api.ObjectID.ORE_VEIN_26662; import static net.runelite.api.ObjectID.ORE_VEIN_26663; import static net.runelite.api.ObjectID.ORE_VEIN_26664; +import static net.runelite.api.ObjectID.ROCKS_41547; +import static net.runelite.api.ObjectID.ROCKS_41548; +import static net.runelite.api.ObjectID.ROCKS_41549; +import static net.runelite.api.ObjectID.ROCKS_41550; import net.runelite.api.Player; import net.runelite.api.WallObject; import net.runelite.api.coords.WorldPoint; @@ -79,12 +83,12 @@ import net.runelite.client.ui.overlay.OverlayMenuEntry; @PluginDependency(XpTrackerPlugin.class) public class MiningPlugin extends Plugin { - private static final Pattern MINING_PATERN = Pattern.compile( + private static final Pattern MINING_PATTERN = Pattern.compile( "You " + "(?:manage to|just)" + " (?:mined?|quarry) " + "(?:some|an?) " + - "(?:copper|tin|clay|iron|silver|coal|gold|mithril|adamantite|runeite|amethyst|sandstone|granite|Opal|piece of Jade|Red Topaz|Emerald|Sapphire|Ruby|Diamond)" + + "(?:copper|tin|clay|iron|silver|coal|gold|mithril|adamantite|runeite|amethyst|sandstone|granite|barronite shards|barronite deposit|Opal|piece of Jade|Red Topaz|Emerald|Sapphire|Ruby|Diamond)" + "(?:\\.|!)"); @Inject @@ -343,10 +347,20 @@ public class MiningPlugin extends Plugin respawns.add(rockRespawn); break; } + case ROCKS_41549: // Depleted barronite vein + case ROCKS_41550: // Depleted barronite vein + { + Rock rock = Rock.BARRONITE; + RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(region).toMillis(), rock.getZOffset()); + respawns.add(rockRespawn); + break; + } case ORE_VEIN_26661: // Motherlode vein case ORE_VEIN_26662: // Motherlode vein case ORE_VEIN_26663: // Motherlode vein case ORE_VEIN_26664: // Motherlode vein + case ROCKS_41547: // Barronite vein + case ROCKS_41548: // Barronite vein { // If the vein respawns before the timer is up, remove it final WorldPoint point = object.getWorldLocation(); @@ -361,7 +375,7 @@ public class MiningPlugin extends Plugin { if (event.getType() == ChatMessageType.SPAM || event.getType() == ChatMessageType.GAMEMESSAGE) { - if (MINING_PATERN.matcher(event.getMessage()).matches()) + if (MINING_PATTERN.matcher(event.getMessage()).matches()) { if (session == null) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mining/Rock.java b/runelite-client/src/main/java/net/runelite/client/plugins/mining/Rock.java index 4f8cf9b32f..ac28366b8b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mining/Rock.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mining/Rock.java @@ -97,7 +97,8 @@ enum Rock EFH_SALT(Duration.of(9, GAME_TICKS), 0, ROCKS_33255), TE_SALT(Duration.of(9, GAME_TICKS), 0, ROCKS_33256), BASALT(Duration.of(9, GAME_TICKS), 0, ROCKS_33257), - DAEYALT_ESSENCE(Duration.of(MiningRocksOverlay.DAEYALT_MAX_RESPAWN_TIME, GAME_TICKS), 0, DAEYALT_ESSENCE_39095); + DAEYALT_ESSENCE(Duration.of(MiningRocksOverlay.DAEYALT_MAX_RESPAWN_TIME, GAME_TICKS), 0, DAEYALT_ESSENCE_39095), + BARRONITE(Duration.of(89, GAME_TICKS), 140); private static final int WILDERNESS_RESOURCE_AREA = 12605; private static final int MISCELLANIA = 10044; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/roofremoval/RoofRemovalPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/roofremoval/RoofRemovalPlugin.java index a9e92f4420..9f86d9a47e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/roofremoval/RoofRemovalPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/roofremoval/RoofRemovalPlugin.java @@ -46,6 +46,7 @@ import static net.runelite.api.Constants.ROOF_FLAG_HOVERED; import static net.runelite.api.Constants.ROOF_FLAG_POSITION; import net.runelite.api.GameState; import net.runelite.api.Tile; +import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.GameStateChanged; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; @@ -246,14 +247,17 @@ public class RoofRemovalPlugin extends Plugin continue; } - int regionID = tile.getWorldLocation().getRegionID() << 2 | z; + // Properly account for instances shifting worldpoints around + final WorldPoint wp = WorldPoint.fromLocalInstance(client, tile.getLocalLocation(), tile.getPlane()); + + int regionID = wp.getRegionID() << 2 | z; if (!overrides.containsKey(regionID)) { continue; } - int rx = tile.getWorldLocation().getRegionX(); - int ry = tile.getWorldLocation().getRegionY(); + int rx = wp.getRegionX(); + int ry = wp.getRegionY(); long[] region = overrides.get(regionID); if ((region[ry] & (1L << rx)) != 0) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java index b683414722..85fef484b9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java @@ -61,6 +61,8 @@ enum MiningSiteLocation BLAST_MINE_WEST(new WorldPoint(1471, 3865, 0), new Rock(22, Ore.HARD_ROCK)), BRIMHAVEN_NORTH(new WorldPoint(2732, 3225, 0), new Rock(10, Ore.GOLD)), BRIMHAVEN_SOUTH_(new WorldPoint(2743, 3150, 0), new Rock(6, Ore.GOLD)), + CAMDOZAAL_MINES_EAST(new WorldPoint(2934, 5811, 0), new Rock(8, Ore.BARRONITE), new Rock(1, Ore.CLAY), new Rock(2, Ore.TIN), new Rock(1, Ore.COPPER)), + CAMDOZAAL_MINES_WEST(new WorldPoint(2914, 5811, 0), new Rock(10, Ore.BARRONITE), new Rock(2, Ore.COPPER), new Rock(2, Ore.CLAY), new Rock(1, Ore.TIN)), CENTRAL_FREMENIK_ISLES(new WorldPoint(2374, 3850, 0), new Rock(7, Ore.COAL), new Rock(1, Ore.RUNITE)), CITHAREDE_ABBEY(new WorldPoint(3400, 3170, 0), new Rock(3, Ore.IRON), new Rock (3, Ore.COAL)), COAL_TRUCKS(new WorldPoint(2580, 3484, 0), new Rock(18, Ore.COAL)), @@ -238,6 +240,7 @@ enum MiningSiteLocation TIN("Tin"), LIMESTONE("Limestone"), BLURITE("Blurite"), + BARRONITE("Barronite"), IRON("Iron"), ELEMENTAL("Elemental"), SILVER("Silver"), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java index 526d3aacbc..1243c76712 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java @@ -63,6 +63,7 @@ public class XpGlobesOverlay extends Overlay private static final int MINIMUM_STEP = 10; private static final int PROGRESS_RADIUS_START = 90; private static final int PROGRESS_RADIUS_REMAINDER = 0; + private static final int PROGRESS_BACKGROUND_SIZE = 5; private static final int TOOLTIP_RECT_SIZE_X = 150; private static final Color DARK_OVERLAY_COLOR = new Color(0, 0, 0, 180); static final String FLIP_ACTION = "Flip"; @@ -108,31 +109,34 @@ public class XpGlobesOverlay extends Overlay return null; } - int curDrawPosition = 0; + // The progress arc is drawn either side of the perimeter of the background. This value accounts for that + // when calculating draw positions and overall size of the overlay + final int progressArcOffset = (int) Math.ceil(Math.max(PROGRESS_BACKGROUND_SIZE, config.progressArcStrokeWidth()) / 2.0); + int curDrawPosition = progressArcOffset; for (final XpGlobe xpGlobe : xpGlobes) { int startXp = xpTrackerService.getStartGoalXp(xpGlobe.getSkill()); int goalXp = xpTrackerService.getEndGoalXp(xpGlobe.getSkill()); if (config.alignOrbsVertically()) { - renderProgressCircle(graphics, xpGlobe, startXp, goalXp, 0, curDrawPosition, getBounds()); + renderProgressCircle(graphics, xpGlobe, startXp, goalXp, progressArcOffset, curDrawPosition, getBounds()); } else { - renderProgressCircle(graphics, xpGlobe, startXp, goalXp, curDrawPosition, 0, getBounds()); + renderProgressCircle(graphics, xpGlobe, startXp, goalXp, curDrawPosition, progressArcOffset, getBounds()); } curDrawPosition += MINIMUM_STEP + config.xpOrbSize(); } // Get length of markers - final int markersLength = (queueSize * (config.xpOrbSize())) + ((MINIMUM_STEP) * (queueSize - 1)); + final int markersLength = (queueSize * (config.xpOrbSize() + progressArcOffset)) + ((MINIMUM_STEP) * (queueSize - 1)); if (config.alignOrbsVertically()) { - return new Dimension(config.xpOrbSize(), markersLength); + return new Dimension(config.xpOrbSize() + progressArcOffset * 2, markersLength); } else { - return new Dimension(markersLength, config.xpOrbSize()); + return new Dimension(markersLength, config.xpOrbSize() + progressArcOffset * 2); } } @@ -184,7 +188,7 @@ public class XpGlobesOverlay extends Overlay x, y, config.xpOrbSize(), config.xpOrbSize(), PROGRESS_RADIUS_REMAINDER, radiusToGoalXp, - 5, + PROGRESS_BACKGROUND_SIZE, config.progressOrbOutLineColor() ); drawProgressArc( diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index 51f719e3fe..c658c6944a 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -69,11 +69,14 @@ import net.runelite.client.ui.JagexColors; import net.runelite.client.ui.overlay.tooltip.Tooltip; import net.runelite.client.ui.overlay.tooltip.TooltipManager; import net.runelite.client.util.ColorUtil; +import org.slf4j.Marker; +import org.slf4j.MarkerFactory; @Singleton @Slf4j public class OverlayRenderer extends MouseAdapter implements KeyListener { + private static final Marker DEDUPLICATE = MarkerFactory.getMarker("DEDUPLICATE"); private static final int BORDER = 5; private static final int BORDER_TOP = BORDER + 15; private static final int PADDING = 2; @@ -786,7 +789,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener } catch (Exception ex) { - log.warn("Error during overlay rendering", ex); + log.warn(DEDUPLICATE, "Error during overlay rendering", ex); return; } diff --git a/runelite-client/src/main/java/net/runelite/client/util/DeduplicationFilter.java b/runelite-client/src/main/java/net/runelite/client/util/DeduplicationFilter.java new file mode 100644 index 0000000000..2b99a27e97 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/util/DeduplicationFilter.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2021, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.util; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.turbo.TurboFilter; +import ch.qos.logback.core.spi.FilterReply; +import java.util.Deque; +import java.util.concurrent.ConcurrentLinkedDeque; +import lombok.EqualsAndHashCode; +import lombok.RequiredArgsConstructor; +import org.slf4j.Marker; +import org.slf4j.MarkerFactory; + +public class DeduplicationFilter extends TurboFilter +{ + private static final Marker deduplicateMarker = MarkerFactory.getMarker("DEDUPLICATE"); + private static final int CACHE_SIZE = 8; + private static final int DUPLICATE_LOG_COUNT = 1000; + + @RequiredArgsConstructor + @EqualsAndHashCode(exclude = {"count"}) + private static class LogException + { + private final String message; + private final StackTraceElement[] stackTraceElements; + private volatile int count; + } + + private final Deque cache = new ConcurrentLinkedDeque<>(); + + @Override + public void stop() + { + cache.clear(); + super.stop(); + } + + @Override + public FilterReply decide(Marker marker, Logger logger, Level level, String s, Object[] objects, Throwable throwable) + { + if (marker != deduplicateMarker || logger.isDebugEnabled() || throwable == null) + { + return FilterReply.NEUTRAL; + } + + LogException logException = new LogException(s, throwable.getStackTrace()); + for (LogException e : cache) + { + if (logException.equals(e)) + { + // this iinc is not atomic, but doesn't matter in practice + if (++e.count % DUPLICATE_LOG_COUNT == 0) + { + logger.warn("following log message logged " + DUPLICATE_LOG_COUNT + " times!"); + return FilterReply.NEUTRAL; + } + return FilterReply.DENY; + } + } + + synchronized (cache) + { + if (cache.size() >= CACHE_SIZE) + { + cache.pop(); + } + cache.push(logException); + } + + return FilterReply.NEUTRAL; + } +} diff --git a/runelite-client/src/main/resources/logback.xml b/runelite-client/src/main/resources/logback.xml index b92f056e96..db2cb318e4 100644 --- a/runelite-client/src/main/resources/logback.xml +++ b/runelite-client/src/main/resources/logback.xml @@ -24,6 +24,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/roofremoval/overrides.jsonc b/runelite-client/src/main/resources/net/runelite/client/plugins/roofremoval/overrides.jsonc index b831d41f43..656c4ae4dc 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/roofremoval/overrides.jsonc +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/roofremoval/overrides.jsonc @@ -3260,5 +3260,15 @@ "z1": 1, "z2": 2 } + ], + "10290": [ // Ardougne Monastery + { + "rx1": 43, + "ry1": 17, + "rx2": 49, + "ry2": 17, + "z1": 0, + "z2": 0 + } ] } diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_cooking.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_cooking.json index 6ddb07cbaf..8e86a25a65 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_cooking.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_cooking.json @@ -78,6 +78,12 @@ "name": "Baked Potato", "xp": 15 }, + { + "level": 7, + "icon": 25654, + "name": "Guppy", + "xp": 12 + }, { "level": 8, "icon": 2048, @@ -228,6 +234,12 @@ "name": "Cup of tea", "xp": 52 }, + { + "level": 20, + "icon": 25660, + "name": "Cavefish", + "xp": 23 + }, { "level": 21, "icon": 9988, @@ -378,6 +390,12 @@ "name": "Choc Saturday", "xp": 170 }, + { + "level": 33, + "icon": 25666, + "name": "Tetra", + "xp": 31 + }, { "level": 34, "icon": 7178, @@ -516,6 +534,12 @@ "name": "Fried Mushrooms", "xp": 60 }, + { + "level": 46, + "icon": 25672, + "name": "Catfish", + "xp": 43 + }, { "level": 47, "icon": 7188, diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fishing.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fishing.json index f55759fece..730be09d00 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fishing.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fishing.json @@ -24,6 +24,12 @@ "name": "Raw Karambwanji", "xp": 5 }, + { + "level": 7, + "icon": 25652, + "name": "Raw Guppy", + "xp": 8 + }, { "level": 10, "icon": 345, @@ -48,6 +54,12 @@ "name": "Raw Trout", "xp": 50 }, + { + "level": 20, + "icon": 25658, + "name": "Raw Cavefish", + "xp": 16 + }, { "level": 23, "icon": 341, @@ -72,6 +84,12 @@ "name": "Raw Salmon", "xp": 70 }, + { + "level": 33, + "icon": 25664, + "name": "Raw Tetra", + "xp": 24 + }, { "level": 35, "icon": 359, @@ -102,6 +120,12 @@ "name": "Raw Bass", "xp": 100 }, + { + "level": 46, + "icon": 25670, + "name": "Raw Catfish", + "xp": 33 + }, { "level": 48, "icon": 11328, diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json index 728f204861..a944c4782f 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json @@ -36,6 +36,18 @@ "name": "Limestone", "xp": 26.5 }, + { + "level": 14, + "icon": 25683, + "name": "Barronite shards", + "xp": 16 + }, + { + "level": 14, + "icon": 25684, + "name": "Barronite deposit", + "xp": 32 + }, { "level": 15, "icon": 440, diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_prayer.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_prayer.json index 8ef26c4797..9ebde37563 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_prayer.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_prayer.json @@ -368,6 +368,30 @@ "icon": 25419, "name": "Urium Remains", "xp": 120 + }, + { + "level": 1, + "icon": 25654, + "name": "Guppy", + "xp": 4 + }, + { + "level": 1, + "icon": 25660, + "name": "Cavefish", + "xp": 7 + }, + { + "level": 1, + "icon": 25666, + "name": "Tetra", + "xp": 10 + }, + { + "level": 1, + "icon": 25672, + "name": "Cavefish", + "xp": 16 } ] } diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_runecraft.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_runecraft.json index 3e62d892f4..901196750e 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_runecraft.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_runecraft.json @@ -102,6 +102,12 @@ "name": "Mind Rune", "xp": 5.5 }, + { + "level": 2, + "icon": 25696, + "name": "Mind core", + "xp": 55 + }, { "level": 5, "icon": 555, @@ -156,6 +162,12 @@ "name": "Body Rune", "xp": 7.5 }, + { + "level": 20, + "icon": 25698, + "name": "Body core", + "xp": 75 + }, { "level": 23, "icon": 4699, @@ -174,6 +186,12 @@ "name": "Chaos Rune", "xp": 8.5 }, + { + "level": 35, + "icon": 25700, + "name": "Chaos core", + "xp": 85 + }, { "level": 40, "icon": 9075, diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json index adce0a7faf..bf829f53b6 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json @@ -156,6 +156,12 @@ "name": "Bronze 2h Sword", "xp": 37.5 }, + { + "level": 14, + "icon": 25684, + "name": "Barronite deposits", + "xp": 30 + }, { "level": 15, "icon": 2351,