Merge remote-tracking branch 'runelite/master'
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 "<html>" + name + " x " + quantity + ignoredLabel
|
||||
+ "<br>GE: " + QuantityFormatter.quantityToStackSize(gePrice)
|
||||
+ "<br>HA: " + QuantityFormatter.quantityToStackSize(haPrice) + "</html>";
|
||||
final StringBuilder sb = new StringBuilder("<html>");
|
||||
sb.append(name).append(" x ").append(QuantityFormatter.formatNumber(quantity)).append(ignoredLabel);
|
||||
if (item.getId() == ItemID.COINS_995)
|
||||
{
|
||||
sb.append("</html>");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
sb.append("<br>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("</html>");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
sb.append("<br>HA: ").append(QuantityFormatter.quantityToStackSize(haPrice));
|
||||
if (quantity > 1)
|
||||
{
|
||||
sb.append(" (").append(QuantityFormatter.quantityToStackSize(item.getHaPrice())).append(" ea)");
|
||||
}
|
||||
sb.append("</html>");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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"),
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (c) 2021, Adam <Adam@sigterm.info>
|
||||
* 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<LogException> 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;
|
||||
}
|
||||
}
|
||||
@@ -24,6 +24,8 @@
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
-->
|
||||
<configuration scan="true">
|
||||
<turboFilter class="net.runelite.client.util.DeduplicationFilter"/>
|
||||
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Pattern>
|
||||
|
||||
@@ -3260,5 +3260,15 @@
|
||||
"z1": 1,
|
||||
"z2": 2
|
||||
}
|
||||
],
|
||||
"10290": [ // Ardougne Monastery
|
||||
{
|
||||
"rx1": 43,
|
||||
"ry1": 17,
|
||||
"rx2": 49,
|
||||
"ry2": 17,
|
||||
"z1": 0,
|
||||
"z2": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -156,6 +156,12 @@
|
||||
"name": "Bronze 2h Sword",
|
||||
"xp": 37.5
|
||||
},
|
||||
{
|
||||
"level": 14,
|
||||
"icon": 25684,
|
||||
"name": "Barronite deposits",
|
||||
"xp": 30
|
||||
},
|
||||
{
|
||||
"level": 15,
|
||||
"icon": 2351,
|
||||
|
||||
Reference in New Issue
Block a user