diff --git a/build.gradle b/build.gradle index 804d053adb..535702c0a8 100644 --- a/build.gradle +++ b/build.gradle @@ -92,7 +92,7 @@ allprojects { if (this.name != 'rs-client') apply plugin: 'checkstyle' group = 'com.openosrs' - version = '1.5.36-SNAPSHOT' + version = '1.5.37-SNAPSHOT' ext { rsversion = 184 diff --git a/runelite-api/src/main/java/net/runelite/api/IndexedSprite.java b/runelite-api/src/main/java/net/runelite/api/IndexedSprite.java index b033ef61e9..21334409b5 100644 --- a/runelite-api/src/main/java/net/runelite/api/IndexedSprite.java +++ b/runelite-api/src/main/java/net/runelite/api/IndexedSprite.java @@ -25,119 +25,39 @@ package net.runelite.api; /** - * Represents an indexed sprite. + * Represents an paletted sprite. */ public interface IndexedSprite { /** - * Gets the pixels contained by the sprite. - * - * @return the sprite pixels + * The bitmap of this sprite. Each value is an index into {@link #getPalette()}. + * 0 is transparent */ byte[] getPixels(); - - /** - * Sets the pixels contained by the sprite. - * - * @param pixels the new sprite pixels - */ void setPixels(byte[] pixels); /** - * Gets the color palette for the sprites pixels. - * - * @return the color palette + * The color palette in RGB. The zero index is unused. */ int[] getPalette(); - - /** - * Sets the color palette for the sprites pixels. - * - * @param palette the new color palette - */ void setPalette(int[] palette); - /** - * Gets the offset of the sprite along the x-axis. - * - * @return the x-axis offset - */ int getOffsetX(); - - /** - * Sets the offset of the sprite along the x-axis. - * - * @param offsetX new x-axis offset - */ void setOffsetX(int offsetX); - /** - * Gets the offset of the sprite along the y-axis. - * - * @return the y-axis offset - */ int getOffsetY(); - - /** - * Sets the offset of the sprite along the y-axis. - * - * @param offsetY new y-axis offset - */ void setOffsetY(int offsetY); - /** - * Gets the width of the sprite. - * - * @return the width - */ int getWidth(); - - /** - * Sets the width of the sprite. - * - * @param width the new width - */ void setWidth(int width); - /** - * Gets the original width of the sprite. - * - * @return the width - */ - int getOriginalWidth(); - /** - * Sets the original width of the sprite. - * - * @param originalWidth the width - */ + int getHeight(); + void setHeight(int height); + + int getOriginalWidth(); void setOriginalWidth(int originalWidth); - /** - * Gets the height of the sprite. - * - * @return the height - */ - int getHeight(); - - /** - * Sets the height of the sprite. - * - * @param height the height - */ - void setHeight(int height); - - /** - * Gets the original height of the sprite. - * - * @return the height - */ int getOriginalHeight(); - - /** - * Sets the original height of the sprite. - * - * @param originalHeight the height - */ void setOriginalHeight(int originalHeight); } diff --git a/runelite-api/src/main/java/net/runelite/api/ItemID.java b/runelite-api/src/main/java/net/runelite/api/ItemID.java index f6b356b099..a66452fcb2 100644 --- a/runelite-api/src/main/java/net/runelite/api/ItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/ItemID.java @@ -8080,16 +8080,17 @@ public final class ItemID public static final int BIRD_SNARE_PACK = 12740; public static final int BOX_TRAP_PACK = 12742; public static final int MAGIC_IMP_BOX_PACK = 12744; - public static final int MYSTERIOUS_EMBLEM = 12746; - public static final int MYSTERIOUS_EMBLEM_TIER_2 = 12748; - public static final int MYSTERIOUS_EMBLEM_TIER_3 = 12749; - public static final int MYSTERIOUS_EMBLEM_TIER_4 = 12750; - public static final int MYSTERIOUS_EMBLEM_TIER_5 = 12751; - public static final int MYSTERIOUS_EMBLEM_TIER_6 = 12752; - public static final int MYSTERIOUS_EMBLEM_TIER_7 = 12753; - public static final int MYSTERIOUS_EMBLEM_TIER_8 = 12754; - public static final int MYSTERIOUS_EMBLEM_TIER_9 = 12755; - public static final int MYSTERIOUS_EMBLEM_TIER_10 = 12756; + public static final int ARCHAIC_EMBLEM_TIER_1 = 12746; + public static final int ARCHAIC_EMBLEM_TIER_1_12747 = 12747; + public static final int ARCHAIC_EMBLEM_TIER_2 = 12748; + public static final int ARCHAIC_EMBLEM_TIER_3 = 12749; + public static final int ARCHAIC_EMBLEM_TIER_4 = 12750; + public static final int ARCHAIC_EMBLEM_TIER_5 = 12751; + public static final int ARCHAIC_EMBLEM_TIER_6 = 12752; + public static final int ARCHAIC_EMBLEM_TIER_7 = 12753; + public static final int ARCHAIC_EMBLEM_TIER_8 = 12754; + public static final int ARCHAIC_EMBLEM_TIER_9 = 12755; + public static final int ARCHAIC_EMBLEM_TIER_10 = 12756; public static final int BLUE_DARK_BOW_PAINT = 12757; public static final int GREEN_DARK_BOW_PAINT = 12759; public static final int YELLOW_DARK_BOW_PAINT = 12761; @@ -10860,6 +10861,7 @@ public final class ItemID public static final int HEALER_ICON_23484 = 23484; public static final int HEALER_ICON_23485 = 23485; public static final int HEALER_ICON_23486 = 23486; + public static final int ARCHAIC_EMBLEM_TIER_10_23487 = 23487; public static final int WINE_OF_ZAMORAK_23489 = 23489; public static final int LARRANS_KEY = 23490; public static final int SRARACHA = 23495; @@ -11285,5 +11287,11 @@ public final class ItemID public static final int BASILISK_JAW = 24268; public static final int NEITIZNOT_FACEGUARD = 24271; public static final int BASILISK_KNIGHT = 24276; + public static final int MYSTERIOUS_EMBLEM_TIER_1 = 24277; + public static final int MYSTERIOUS_EMBLEM_TIER_2 = 24279; + public static final int MYSTERIOUS_EMBLEM_TIER_3 = 24281; + public static final int MYSTERIOUS_EMBLEM_TIER_4 = 24283; + public static final int MYSTERIOUS_EMBLEM_TIER_5 = 24285; + public static final int DECORATIVE_EMBLEM = 24287; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/NPCDefinition.java b/runelite-api/src/main/java/net/runelite/api/NPCDefinition.java index fa70c5051e..7486cc1068 100644 --- a/runelite-api/src/main/java/net/runelite/api/NPCDefinition.java +++ b/runelite-api/src/main/java/net/runelite/api/NPCDefinition.java @@ -24,91 +24,70 @@ */ package net.runelite.api; +/** + * Information about a specific {@link NpcID} + */ public interface NPCDefinition { /** * Gets the name of the NPC. - * - * @return the name */ String getName(); /** * Gets the model IDs that compose this NPC. - * - * @return the NPCs model IDs */ int[] getModels(); /** - * Gets an array of possible right-click menu actions that can be - * performed on the NPC. - * - * @return the menu actions + * The 5 menuops this NPC has when in world. Index 0 corresponds to + * {@link MenuAction#NPC_FIRST_OPTION}, Index 2 to + * {@link MenuAction#NPC_SECOND_OPTION} and so on. */ String[] getActions(); - /** - * Gets whether the NPC can be clicked. - * - * @return true if the NPC can be clicked, false otherwise - */ boolean isClickable(); /** * Gets whether the NPC is visible on the mini-map. - * - * @return the mini-map visible state */ boolean isMinimapVisible(); - /** - * Gets whether the NPC is visible. - * - * @return the visible state - */ boolean isVisible(); /** * Gets the ID of the NPC. * - * @return the ID of the NPC * @see NpcID */ int getId(); /** - * Gets the combat level of the NPC. - * * @return the combat level, -1 if none */ int getCombatLevel(); /** - * Gets the configuration data for the NPC. - * - * @return the configuration data + * Get the {@link NpcID}s of NPCs this can transform into, depending + * on a {@link Varbits} or {@link VarPlayer} */ int[] getConfigs(); /** - * Transforms this NPC into a new state, which may have a different ID. + * Get the NPC composition the player's state says this NPC should + * transmogrify into. * - * @return the transformed composition + * @throws NullPointerException if {@link #getConfigs()} is null */ NPCDefinition transform(); /** - * Gets the size of the NPC. - * - * @return the NPCs size + * How many tiles wide this NPC is */ int getSize(); /** * Gets the displayed overhead icon of the NPC. - * - * @return the overhead icon */ HeadIcon getOverheadIcon(); } diff --git a/runelite-api/src/main/java/net/runelite/api/NpcID.java b/runelite-api/src/main/java/net/runelite/api/NpcID.java index e9ee7b41e9..66e02eea3a 100644 --- a/runelite-api/src/main/java/net/runelite/api/NpcID.java +++ b/runelite-api/src/main/java/net/runelite/api/NpcID.java @@ -286,7 +286,6 @@ public final class NpcID public static final int DWARF = 290; public static final int CHAOS_DWARF = 291; public static final int DWARF_292 = 292; - public static final int DWARF_293 = 293; public static final int DWARF_294 = 294; public static final int DWARF_295 = 295; public static final int DWARF_296 = 296; @@ -301,14 +300,13 @@ public final class NpcID public static final int JENNIFER = 305; public static final int LUMBRIDGE_GUIDE = 306; public static final int DR_JEKYLL = 307; + public static final int EMBLEM_TRADER = 308; public static final int REACHER = 309; public static final int AYESHA = 310; public static final int ADAM = 311; public static final int FROG = 312; public static final int REACHER_313 = 313; public static final int DR_JEKYLL_314 = 314; - public static final int EMBLEM_TRADER = 315; - public static final int EMBLEM_TRADER_316 = 316; public static final int PAUL = 317; public static final int DARK_CORE = 318; public static final int CORPOREAL_BEAST = 319; @@ -7161,8 +7159,7 @@ public final class NpcID public static final int REVENANT_DARK_BEAST = 7938; public static final int REVENANT_KNIGHT = 7939; public static final int REVENANT_DRAGON = 7940; - public static final int EMBLEM_TRADER_7941 = 7941; - public static final int EMBLEM_TRADER_7942 = 7942; + public static final int EMBLEM_TRADER_7943 = 7943; public static final int FISHING_SPOT_7946 = 7946; public static final int FISHING_SPOT_7947 = 7947; public static final int CORSAIR_TRAITOR_HARD = 7948; diff --git a/runelite-api/src/main/java/net/runelite/api/NullItemID.java b/runelite-api/src/main/java/net/runelite/api/NullItemID.java index 6216678f1b..28ddf86d69 100644 --- a/runelite-api/src/main/java/net/runelite/api/NullItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/NullItemID.java @@ -4551,7 +4551,6 @@ public final class NullItemID public static final int NULL_12741 = 12741; public static final int NULL_12743 = 12743; public static final int NULL_12745 = 12745; - public static final int NULL_12747 = 12747; public static final int NULL_12758 = 12758; public static final int NULL_12760 = 12760; public static final int NULL_12762 = 12762; @@ -12416,7 +12415,6 @@ public final class NullItemID public static final int NULL_23456 = 23456; public static final int NULL_23457 = 23457; public static final int NULL_23459 = 23459; - public static final int NULL_23487 = 23487; public static final int NULL_23488 = 23488; public static final int NULL_23491 = 23491; public static final int NULL_23492 = 23492; @@ -12783,5 +12781,10 @@ public final class NullItemID public static final int NULL_24273 = 24273; public static final int NULL_24274 = 24274; public static final int NULL_24275 = 24275; + public static final int NULL_24278 = 24278; + public static final int NULL_24280 = 24280; + public static final int NULL_24282 = 24282; + public static final int NULL_24284 = 24284; + public static final int NULL_24286 = 24286; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/ObjectDefinition.java b/runelite-api/src/main/java/net/runelite/api/ObjectDefinition.java index bc2e4f5b0a..4dd57e5578 100644 --- a/runelite-api/src/main/java/net/runelite/api/ObjectDefinition.java +++ b/runelite-api/src/main/java/net/runelite/api/ObjectDefinition.java @@ -25,58 +25,52 @@ package net.runelite.api; /** - * Represents the template of a specific object. + * Information about a specific {@link ObjectID} */ public interface ObjectDefinition { /** * Gets ID for the object. * - * @return the object ID + * @see ObjectID */ int getId(); /** * Gets the name of the object. - * - * @return the object name */ String getName(); /** - * Gets an array of possible right-click menu actions that can be - * performed on the object. - * - * @return the menu actions + * The 5 menuops this object has when in world. Index 0 corresponds to + * {@link MenuAction#GAME_OBJECT_FIRST_OPTION}, Index 2 to + * {@link MenuAction#GAME_OBJECT_SECOND_OPTION} and so on. */ String[] getActions(); /** - * Gets the map scene ID for the object. - * - * @return the scene ID + * Gets the index of this object in the {@link Client#getMapScene()} + * array, or -1 if it has no map scene icon */ int getMapSceneId(); /** - * Gets the map icon ID for the object. - * - * @return the map icon ID + * Gets the index of this object in the {@link Client#getMapIcons()} + * array, or -1 if it has no full map icon */ int getMapIconId(); /** - * Gets IDs for objects that are considered fakes of this object, - * such as barrows walls. - * - * @return the impostor IDs + * Get the {@link ObjectID}s of objects this can transform into, depending + * on a {@link Varbits} or {@link VarPlayer} */ int[] getImpostorIds(); /** - * Gets the impostor composition for this object. + * Get the object composition the player's state says this object should + * transmogrify into. * - * @return the impostor + * @throws NullPointerException if {@link #getImpostorIds()} is null */ ObjectDefinition getImpostor(); } diff --git a/runelite-api/src/main/java/net/runelite/api/ObjectID.java b/runelite-api/src/main/java/net/runelite/api/ObjectID.java index 6f56b79523..33a53e5f75 100644 --- a/runelite-api/src/main/java/net/runelite/api/ObjectID.java +++ b/runelite-api/src/main/java/net/runelite/api/ObjectID.java @@ -19383,5 +19383,6 @@ public final class ObjectID public static final int DOOR_37422 = 37422; public static final int THE_JORMUNGAND = 37424; public static final int ROUGH_WALL_37431 = 37431; + public static final int STREAK_INFO = 37434; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/TextureProvider.java b/runelite-api/src/main/java/net/runelite/api/TextureProvider.java index b7df733438..b964056108 100644 --- a/runelite-api/src/main/java/net/runelite/api/TextureProvider.java +++ b/runelite-api/src/main/java/net/runelite/api/TextureProvider.java @@ -30,21 +30,19 @@ public interface TextureProvider /** * Set the brightness for textures, clearing the texture cache. - * @param brightness + * + * .9 is the darkest value available in the standard options + * .6 is the brightest value */ void setBrightness(double brightness); /** * Get all textures - * - * @return */ Texture[] getTextures(); /** * Get the pixels for a texture - * @param textureId - * @return */ int[] load(int textureId); } diff --git a/runelite-api/src/main/java/net/runelite/api/TileItem.java b/runelite-api/src/main/java/net/runelite/api/TileItem.java index ba3d437dc6..61180ad3d1 100644 --- a/runelite-api/src/main/java/net/runelite/api/TileItem.java +++ b/runelite-api/src/main/java/net/runelite/api/TileItem.java @@ -30,17 +30,10 @@ package net.runelite.api; public interface TileItem extends Entity { /** - * Gets the items ID. - * * @return the ID of the item * @see ItemID */ int getId(); - /** - * Gets the items quantity. - * - * @return the items quantity - */ int getQuantity(); } diff --git a/runelite-api/src/main/java/net/runelite/api/TileObject.java b/runelite-api/src/main/java/net/runelite/api/TileObject.java index c78fe05622..06a10f363e 100644 --- a/runelite-api/src/main/java/net/runelite/api/TileObject.java +++ b/runelite-api/src/main/java/net/runelite/api/TileObject.java @@ -32,88 +32,65 @@ import java.awt.Shape; import javax.annotation.Nullable; /** - * Represents an object that a tile holds. + * Represents an object on a Tile */ public interface TileObject extends Locatable { - /** - * Gets the hashed value of this object. - * - * @return the object hash - */ long getHash(); /** * Gets the x-axis coordinate of the object in local context. * - * @return the x-axis coordinate + * @see LocalPoint */ int getX(); /** * Gets the y-axis coordinate of the object in local context. * - * @return the y-axis coordinate + * @see LocalPoint */ int getY(); /** * Gets the plane of the tile that the object is on. - * - * @return the tile plane */ int getPlane(); /** * Gets the ID of the object. * - * @return the object ID + * @see ObjectID + * @see NullObjectID */ int getId(); - /** - * Gets the location coordinate of the object in the world. - * - * @return the world location - */ WorldPoint getWorldLocation(); - /** - * Gets the local location of the object. - * - * @return the local location - */ LocalPoint getLocalLocation(); /** - * Gets the upper-left canvas point where this object is drawn. - * - * @return the canvas location + * Calculates the position of the center of this tile on the canvas */ Point getCanvasLocation(); /** - * Gets the upper-left canvas point where this object is drawn, - * offset by the passed value. + * Calculates the position of the center of this tile on the canvas * - * @param zOffset the z-axis offset - * @return the canvas location + * @param zOffset Vertical offset to apply before projection */ Point getCanvasLocation(int zOffset); /** - * Gets the polygon of the objects model as drawn on the canvas. - * - * @return the canvas polygon + * Creates a polygon outlining the tile this object is on */ Polygon getCanvasTilePoly(); /** - * Gets the text position on the canvas. + * Calculates the canvas point to center {@code text} above the tile this object is on. * - * @param graphics the client graphics - * @param text the text to draw - * @param zOffset the offset from ground plane + * @param graphics the graphics to use for font size calculation + * @param zOffset Vertical offset to apply before projection * @return the canvas point to draw the text at */ Point getCanvasTextLocation(Graphics2D graphics, String text, int zOffset); @@ -127,9 +104,7 @@ public interface TileObject extends Locatable Point getMinimapLocation(); /** - * Get the on-screen clickable area of the object. - * - * @return the clickable area + * Calculate the on-screen clickable area of the object. */ @Nullable Shape getClickbox(); diff --git a/runelite-api/src/main/java/net/runelite/api/VarClientInt.java b/runelite-api/src/main/java/net/runelite/api/VarClientInt.java index dc2d1796fa..faaeff4a92 100644 --- a/runelite-api/src/main/java/net/runelite/api/VarClientInt.java +++ b/runelite-api/src/main/java/net/runelite/api/VarClientInt.java @@ -28,7 +28,11 @@ import lombok.AllArgsConstructor; import lombok.Getter; /** - * An enumeration of integer local variables. + * Client side only, content-developer integers + * + * VarCInts are stored entirely in memory, or locally on a user's + * machine in the preferences2.dat file depending on how Jagex + * configured the variable */ @AllArgsConstructor @Getter diff --git a/runelite-api/src/main/java/net/runelite/api/VarClientStr.java b/runelite-api/src/main/java/net/runelite/api/VarClientStr.java index 79cfe1982b..b07bb8ff26 100644 --- a/runelite-api/src/main/java/net/runelite/api/VarClientStr.java +++ b/runelite-api/src/main/java/net/runelite/api/VarClientStr.java @@ -28,7 +28,11 @@ import lombok.AllArgsConstructor; import lombok.Getter; /** - * An enumeration of string local variables. + * Client side only, content-developer strings + * + * VarCInts are stored entirely in memory, or locally on a user's + * machine in the preferences2.dat file depending on how Jagex + * configured the variable */ @AllArgsConstructor @Getter diff --git a/runelite-api/src/main/java/net/runelite/api/VarPlayer.java b/runelite-api/src/main/java/net/runelite/api/VarPlayer.java index 85487ee55a..414ed46de9 100644 --- a/runelite-api/src/main/java/net/runelite/api/VarPlayer.java +++ b/runelite-api/src/main/java/net/runelite/api/VarPlayer.java @@ -28,7 +28,12 @@ import lombok.AllArgsConstructor; import lombok.Getter; /** - * An enumeration of local player variables. + * Server controlled "content-developer" integers. + * + * VarPlayers are stored per RuneScape player save, and synchronized + * from the server to the client. The client can change them preemptively + * if it thinks they will change the next tick as a lag-hiding measure. + * The client CANNOT directly make the server change a varbit. */ @AllArgsConstructor @Getter diff --git a/runelite-api/src/main/java/net/runelite/api/Varbits.java b/runelite-api/src/main/java/net/runelite/api/Varbits.java index a367fee0c4..6b09685e1a 100644 --- a/runelite-api/src/main/java/net/runelite/api/Varbits.java +++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java @@ -28,7 +28,15 @@ import lombok.AllArgsConstructor; import lombok.Getter; /** - * An enumeration of local client variables. + * Server controlled "content-developer" integers. + * + * @see VarPlayer + * + * These differ from a {@link VarPlayer} in that VarBits can be + * less than 32 bits. One or more VarBits can be assigned to a + * backing VarPlayer, each with a static range of bits that it is + * allowed to access. This allows a more compact representation + * of small values, like booleans */ @AllArgsConstructor @Getter diff --git a/runelite-api/src/main/java/net/runelite/api/events/ScriptCallbackEvent.java b/runelite-api/src/main/java/net/runelite/api/events/ScriptCallbackEvent.java index 601ebb97fa..6461cad9e7 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/ScriptCallbackEvent.java +++ b/runelite-api/src/main/java/net/runelite/api/events/ScriptCallbackEvent.java @@ -34,11 +34,12 @@ import lombok.Data; public class ScriptCallbackEvent implements Event { /** - * The script being called. + * The script that is currently being executed */ private Script script; + /** - * The name of the event that triggered script execution. + * The name passed to runelite_callback */ private String eventName; } diff --git a/runelite-api/src/main/java/net/runelite/api/events/VarClientIntChanged.java b/runelite-api/src/main/java/net/runelite/api/events/VarClientIntChanged.java index 606a63c442..238431d512 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/VarClientIntChanged.java +++ b/runelite-api/src/main/java/net/runelite/api/events/VarClientIntChanged.java @@ -29,6 +29,7 @@ import lombok.Value; /** * An event where a client int var has changed. + * @see net.runelite.api.VarClientInt */ @Value public class VarClientIntChanged implements Event diff --git a/runelite-api/src/main/java/net/runelite/api/events/VarClientStrChanged.java b/runelite-api/src/main/java/net/runelite/api/events/VarClientStrChanged.java index 5b6e2ce502..c483a29584 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/VarClientStrChanged.java +++ b/runelite-api/src/main/java/net/runelite/api/events/VarClientStrChanged.java @@ -29,6 +29,7 @@ import lombok.Value; /** * An event where a client var string has changed. + * @see net.runelite.api.VarClientStr */ @Value public class VarClientStrChanged implements Event diff --git a/runelite-api/src/main/java/net/runelite/api/events/VarbitChanged.java b/runelite-api/src/main/java/net/runelite/api/events/VarbitChanged.java index ebadd78f59..945222c072 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/VarbitChanged.java +++ b/runelite-api/src/main/java/net/runelite/api/events/VarbitChanged.java @@ -30,6 +30,11 @@ import lombok.Data; /** * An event when a varbit or varplayer has changed. + * + * If the client preemptively changes a varp and the server agrees + * the next tick, VarbitChanged will only be posted when the client + * changes the value, not the server. This can cause unintended effects + * if the VarPlayer has special engine behavior assigned to it. */ @Data public class VarbitChanged implements Event diff --git a/runelite-api/src/main/java/net/runelite/api/events/WidgetMenuOptionClicked.java b/runelite-api/src/main/java/net/runelite/api/events/WidgetMenuOptionClicked.java index 0a9270b6a5..492767d832 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/WidgetMenuOptionClicked.java +++ b/runelite-api/src/main/java/net/runelite/api/events/WidgetMenuOptionClicked.java @@ -28,7 +28,7 @@ import net.runelite.api.widgets.WidgetInfo; import lombok.Data; /** - * An event where an option has been clicked in a {@link net.runelite.api.widgets.Widget}s menu. + * A MenuManager widget menu was clicked. This event is NOT fired for non-MenuManager menu options */ @Data public class WidgetMenuOptionClicked implements Event diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/JavaScriptCallback.java b/runelite-api/src/main/java/net/runelite/api/widgets/JavaScriptCallback.java index 01786beccf..5a505a46b1 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/JavaScriptCallback.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/JavaScriptCallback.java @@ -26,6 +26,10 @@ package net.runelite.api.widgets; import net.runelite.api.ScriptEvent; +/** + * An object that can be set as the first argument to a {@link Widget} listener + * to handle ScriptEvents with Java code, rather than cs2. + */ @FunctionalInterface public interface JavaScriptCallback { diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index 71bc87ab2a..4b29f7b316 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -986,11 +986,11 @@ public class WidgetID static final int PVP_WIDGET_CONTAINER = 54; // OUTDATED? static final int SKULL = 56; // OUTDATED? static final int ATTACK_RANGE = 59; // OUTDATED? - static final int BOUNTY_HUNTER_INFO = 18; - static final int KILLDEATH_RATIO = 15; - static final int SKULL_CONTAINER = 61; - static final int SAFE_ZONE = 63; - static final int WILDERNESS_LEVEL = 66; // this can also be the Deadman Mode "Protection" text + static final int BOUNTY_HUNTER_INFO = 6; + static final int KILLDEATH_RATIO = 33; + static final int SKULL_CONTAINER = 53; + static final int SAFE_ZONE = 55; + static final int WILDERNESS_LEVEL = 57; // this can also be the Deadman Mode "Protection" text } static class KourendFavour diff --git a/runelite-client/dependencies.txt b/runelite-client/dependencies.txt new file mode 100644 index 0000000000..db8772c958 --- /dev/null +++ b/runelite-client/dependencies.txt @@ -0,0 +1,96 @@ + +------------------------------------------------------------ +Project :client - RuneLite Client +------------------------------------------------------------ + +runtimeClasspath - Runtime classpath of source set 'main'. ++--- ch.qos.logback:logback-classic:1.2.3 +| +--- ch.qos.logback:logback-core:1.2.3 +| \--- org.slf4j:slf4j-api:1.7.25 -> 1.7.28 ++--- com.google.code.gson:gson:2.8.6 ++--- com.google.guava:guava:28.1-jre +| +--- com.google.guava:failureaccess:1.0.1 +| +--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava +| +--- com.google.code.findbugs:jsr305:3.0.2 +| +--- org.checkerframework:checker-qual:2.8.1 +| +--- com.google.errorprone:error_prone_annotations:2.3.2 +| +--- com.google.j2objc:j2objc-annotations:1.3 +| \--- org.codehaus.mojo:animal-sniffer-annotations:1.18 ++--- com.google.inject:guice:4.2.2 +| +--- javax.inject:javax.inject:1 +| +--- aopalliance:aopalliance:1.0 +| \--- com.google.guava:guava:25.1-android -> 28.1-jre (*) ++--- com.h2database:h2:1.4.200 ++--- com.jakewharton.rxrelay2:rxrelay:2.1.1 +| \--- io.reactivex.rxjava2:rxjava:2.2.2 -> 2.2.13 +| \--- org.reactivestreams:reactive-streams:1.0.3 ++--- com.squareup.okhttp3:okhttp:4.2.2 +| +--- com.squareup.okio:okio:2.2.2 +| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.2.60 -> 1.3.50 +| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50 +| | \--- org.jetbrains:annotations:13.0 -> 17.0.0 +| \--- org.jetbrains.kotlin:kotlin-stdlib:1.3.50 (*) ++--- io.reactivex.rxjava2:rxjava:2.2.13 (*) ++--- net.java.dev.jna:jna:5.4.0 ++--- net.java.dev.jna:jna-platform:5.4.0 +| \--- net.java.dev.jna:jna:5.4.0 ++--- net.runelite:discord:1.1 +| +--- net.java.dev.jna:jna:4.5.1 -> 5.4.0 +| \--- com.google.code.findbugs:jsr305:3.0.2 ++--- net.runelite.pushingpixels:substance:8.0.02 ++--- net.sf.jopt-simple:jopt-simple:5.0.4 ++--- org.apache.commons:commons-text:1.8 +| \--- org.apache.commons:commons-lang3:3.9 ++--- org.apache.httpcomponents:httpcore:4.4.12 ++--- org.apache.httpcomponents:httpmime:4.5.10 +| \--- org.apache.httpcomponents:httpclient:4.5.10 +| +--- org.apache.httpcomponents:httpcore:4.4.12 +| +--- commons-logging:commons-logging:1.2 +| \--- commons-codec:commons-codec:1.11 ++--- org.codehaus.plexus:plexus-utils:3.3.0 ++--- org.javassist:javassist:3.26.0-GA ++--- org.jetbrains:annotations:17.0.0 ++--- org.jogamp.gluegen:gluegen-rt:2.3.2 ++--- org.jogamp.jogl:jogl-all:2.3.2 ++--- org.jooq:jooq:3.12.1 +| +--- org.reactivestreams:reactive-streams:1.0.2 -> 1.0.3 +| \--- javax.xml.bind:jaxb-api:2.3.0 ++--- org.jooq:jooq-codegen:3.12.1 +| +--- org.jooq:jooq:3.12.1 (*) +| \--- org.jooq:jooq-meta:3.12.1 +| \--- org.jooq:jooq:3.12.1 (*) ++--- org.jooq:jooq-meta:3.12.1 (*) ++--- org.ow2.asm:asm-tree:7.2 +| \--- org.ow2.asm:asm:7.2 ++--- org.slf4j:slf4j-api:1.7.28 ++--- org.xeustechnologies:jcl-core:2.8 +| +--- org.objenesis:objenesis:2.1 +| +--- cglib:cglib-nodep:2.2 +| +--- org.slf4j:slf4j-api:1.7.21 -> 1.7.28 +| \--- org.kamranzafar.commons:object-cloner:0.1 +| \--- org.objenesis:objenesis:2.1 ++--- project :http-api +| +--- com.google.code.gson:gson:2.8.6 +| +--- com.google.guava:guava:28.1-jre (*) +| +--- com.squareup.okhttp3:okhttp:4.2.2 (*) +| +--- io.reactivex.rxjava2:rxjava:2.2.13 (*) +| +--- org.apache.commons:commons-csv:1.7 +| +--- org.slf4j:slf4j-api:1.7.28 +| \--- project :runelite-api +| +--- com.google.code.findbugs:jsr305:3.0.2 +| +--- com.google.guava:guava:28.1-jre (*) +| +--- org.apache.commons:commons-text:1.8 (*) +| \--- org.slf4j:slf4j-api:1.7.28 ++--- project :runelite-api (*) ++--- io.sigpipe:jbsdiff:1.0 +| \--- org.apache.commons:commons-compress:1.5 ++--- com.github.joonasvali.naturalmouse:naturalmouse:2.0.2 +| \--- org.slf4j:slf4j-api:1.7.25 -> 1.7.28 ++--- net.runelite.pushingpixels:trident:1.5.00 ++--- project :injected-client +\--- project :runescape-api + \--- project :runelite-api (*) + +(*) - dependencies omitted (listed previously) + +A web-based, searchable dependency report is available by adding the --scan option. diff --git a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java index 501a5ac934..d0441e964d 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java +++ b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java @@ -223,7 +223,7 @@ public enum AgilityShortcut BRIMHAVEN_DUNGEON_VINE_EAST(87, "Vine", new WorldPoint(2672, 9582, 0), VINE_26880, VINE_26882), BRIMHAVEN_DUNGEON_VINE_WEST(87, "Vine", new WorldPoint(2606, 9584, 0), VINE_26880, VINE_26882), MOUNT_KARUULM_PIPE_SOUTH(88, "Pipe", new WorldPoint(1316, 10214, 0), MYSTERIOUS_PIPE), - MOUNT_KARUULM_PIPE_NORTH(88, "Pipe", new WorldPoint(1346, 10231, 0), MYSTERIOUS_PIPE), + MOUNT_KARUULM_PIPE_NORTH(88, "Pipe", new WorldPoint(1345, 10230, 0), MYSTERIOUS_PIPE), REVENANT_CAVES_CHAMBER_JUMP(89, "Jump", new WorldPoint(3240, 10144, 0), PILLAR_31561); /** 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 07ec488ff7..923d6fd7ce 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 @@ -216,6 +216,8 @@ public enum ItemMapping ITEM_HYDRA_TAIL(HYDRA_TAIL, BONECRUSHER_NECKLACE), ITEM_DRAGONBONE_NECKLACE(DRAGONBONE_NECKLACE, BONECRUSHER_NECKLACE), ITEM_BOTTOMLESS_COMPOST_BUCKET(BOTTOMLESS_COMPOST_BUCKET, BOTTOMLESS_COMPOST_BUCKET_22997), + ITEM_BASILISK_JAW(BASILISK_JAW, NEITIZNOT_FACEGUARD), + ITEM_HELM_OF_NEITIZNOT(HELM_OF_NEITIZNOT, NEITIZNOT_FACEGUARD), // Crystal items ITEM_CRYSTAL_TOOL_SEED(CRYSTAL_TOOL_SEED, CRYSTAL_AXE, CRYSTAL_AXE_INACTIVE, CRYSTAL_HARPOON, CRYSTAL_HARPOON_INACTIVE, CRYSTAL_PICKAXE, CRYSTAL_PICKAXE_INACTIVE), diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java b/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java index 7ebc2818dd..7c6a6e143e 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java @@ -54,7 +54,7 @@ public class ItemVariationMapping static void load() throws IOException { - try (JsonReader reader = new JsonReader(new InputStreamReader(ItemVariationMapping.class.getResourceAsStream("/item_variations.json"), StandardCharsets.UTF_8))) + try (JsonReader reader = new JsonReader(new InputStreamReader(ItemVariationMapping.class.getResourceAsStream("/item_variations.min.json"), StandardCharsets.UTF_8))) { ImmutableMap.Builder builder = ImmutableMap.builderWithExpectedSize(5039); reader.beginObject(); diff --git a/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxTextInput.java b/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxTextInput.java index 5e5bdac41e..3880b7b400 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxTextInput.java +++ b/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxTextInput.java @@ -129,6 +129,12 @@ public class ChatboxTextInput extends ChatboxInput implements KeyListener, Mouse this.clientThread = clientThread; } + public ChatboxTextInput addCharValidator(IntPredicate validator) + { + this.charValidator = this.charValidator.and(validator); + return this; + } + public ChatboxTextInput lines(int lines) { this.lines = lines; @@ -151,7 +157,15 @@ public class ChatboxTextInput extends ChatboxInput implements KeyListener, Mouse public ChatboxTextInput value(String value) { - this.value = new StringBuffer(value); + StringBuffer sb = new StringBuffer(); + for (char c : value.toCharArray()) + { + if (charValidator.test(c)) + { + sb.append(c); + } + } + this.value = sb; cursorAt(this.value.length()); return this; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/ammo/AmmoCounter.java b/runelite-client/src/main/java/net/runelite/client/plugins/ammo/AmmoCounter.java index fe9729246c..01edad16f0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/ammo/AmmoCounter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/ammo/AmmoCounter.java @@ -33,7 +33,7 @@ import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.plugins.Plugin; import net.runelite.client.ui.overlay.infobox.Counter; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; class AmmoCounter extends Counter { @@ -56,7 +56,7 @@ class AmmoCounter extends Counter @Override public String getText() { - return StackFormatter.quantityToRSDecimalStack(getCount()); + return QuantityFormatter.quantityToRSDecimalStack(getCount()); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java index e5f3424724..9dcb1e8c3d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java @@ -66,7 +66,7 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.banktags.tabs.BankSearch; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @PluginDescriptor( name = "Bank", @@ -297,11 +297,11 @@ public class BankPlugin extends Plugin if (this.showExact) { - strCurrentTab += StackFormatter.formatNumber(gePrice) + ")"; + strCurrentTab += QuantityFormatter.formatNumber(gePrice) + ")"; } else { - strCurrentTab += StackFormatter.quantityToStackSize(gePrice) + ")"; + strCurrentTab += QuantityFormatter.quantityToStackSize(gePrice) + ")"; } } @@ -316,11 +316,11 @@ public class BankPlugin extends Plugin if (this.showExact) { - strCurrentTab += StackFormatter.formatNumber(haPrice) + ")"; + strCurrentTab += QuantityFormatter.formatNumber(haPrice) + ")"; } else { - strCurrentTab += StackFormatter.quantityToStackSize(haPrice) + ")"; + strCurrentTab += QuantityFormatter.quantityToStackSize(haPrice) + ")"; } } @@ -479,7 +479,7 @@ public class BankPlugin extends Plugin long compare; try { - compare = StackFormatter.stackSizeToQuantity(matcher.group("num")); + compare = QuantityFormatter.parseQuantity(matcher.group("num")); } catch (ParseException e) { @@ -508,8 +508,8 @@ public class BankPlugin extends Plugin long compare1, compare2; try { - compare1 = StackFormatter.stackSizeToQuantity(num1); - compare2 = StackFormatter.stackSizeToQuantity(num2); + compare1 = QuantityFormatter.parseQuantity(num1); + compare2 = QuantityFormatter.parseQuantity(num2); } catch (ParseException e) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java index 1c122df047..d899671db9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java @@ -37,6 +37,7 @@ import java.text.ParseException; import java.util.ArrayList; import java.util.Collection; import java.util.regex.Matcher; +import java.util.List; import java.util.regex.Pattern; import java.util.stream.Collectors; import javax.inject.Inject; @@ -79,10 +80,11 @@ import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.banktags.tabs.BankSearch; import net.runelite.client.plugins.banktags.tabs.TabInterface; +import static net.runelite.client.plugins.banktags.tabs.TabInterface.FILTERED_CHARS; import net.runelite.client.plugins.banktags.tabs.TabSprites; import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; -import net.runelite.client.util.StackFormatter; import net.runelite.api.util.Text; +import net.runelite.client.util.QuantityFormatter; @PluginDescriptor( name = "Bank Tags", @@ -147,6 +149,9 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis @Inject private EventBus eventBus; + @Inject + private ConfigManager configManager; + private boolean shiftPressed = false; private int nextRowIndex = 0; @VisibleForTesting @@ -163,12 +168,66 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis { addSubscriptions(); + cleanConfig(); keyManager.registerKeyListener(this); mouseManager.registerMouseWheelListener(this); clientThread.invokeLater(tabInterface::init); spriteManager.addSpriteOverrides(TabSprites.values()); } + @Deprecated + private void cleanConfig() + { + removeInvalidTags("tagtabs"); + + List tags = configManager.getConfigurationKeys(CONFIG_GROUP + ".item_"); + tags.forEach(s -> + { + String[] split = s.split("\\.", 2); + removeInvalidTags(split[1]); + }); + + List icons = configManager.getConfigurationKeys(CONFIG_GROUP + ".icon_"); + icons.forEach(s -> + { + String[] split = s.split("\\.", 2); + String replaced = split[1].replaceAll("[<>/]", ""); + if (!split[1].equals(replaced)) + { + String value = configManager.getConfiguration(CONFIG_GROUP, split[1]); + configManager.unsetConfiguration(CONFIG_GROUP, split[1]); + if (replaced.length() > "icon_".length()) + { + configManager.setConfiguration(CONFIG_GROUP, replaced, value); + } + } + }); + } + + @Deprecated + private void removeInvalidTags(final String key) + { + final String value = configManager.getConfiguration(CONFIG_GROUP, key); + if (value == null) + { + return; + } + + String replaced = value.replaceAll("[<>/]", ""); + if (!value.equals(replaced)) + { + replaced = Text.toCSV(Text.fromCSV(replaced)); + if (replaced.isEmpty()) + { + configManager.unsetConfiguration(CONFIG_GROUP, key); + } + else + { + configManager.setConfiguration(CONFIG_GROUP, key, replaced); + } + } + } + @Override public void shutDown() { @@ -381,6 +440,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis String initialValue = Text.toCSV(tags); chatboxPanelManager.openTextInput(name + " tags:
(append " + VAR_TAG_SUFFIX + " for variation tag)") + .addCharValidator(FILTERED_CHARS) .value(initialValue) .onDone((newValue) -> clientThread.invoke(() -> @@ -529,7 +589,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis long compare; try { - compare = StackFormatter.stackSizeToQuantity(matcher.group("num")); + compare = QuantityFormatter.parseQuantity(matcher.group("num")); } catch (ParseException e) { @@ -558,8 +618,8 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis long compare1, compare2; try { - compare1 = StackFormatter.stackSizeToQuantity(num1); - compare2 = StackFormatter.stackSizeToQuantity(num2); + compare1 = QuantityFormatter.parseQuantity(num1); + compare2 = QuantityFormatter.parseQuantity(num2); } catch (ParseException e) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java index b15c412c95..cab68bdab6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java @@ -45,6 +45,7 @@ import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; import java.util.Objects; +import java.util.function.IntPredicate; import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Singleton; @@ -94,6 +95,8 @@ import net.runelite.api.util.Text; @Singleton public class TabInterface { + public static final IntPredicate FILTERED_CHARS = c -> "".indexOf(c) == -1; + private static final Color HILIGHT_COLOR = JagexColors.MENU_TARGET; private static final String SCROLL_UP = "Scroll up"; private static final String SCROLL_DOWN = "Scroll down"; @@ -253,6 +256,7 @@ public class TabInterface } chatboxPanelManager.openTextInput((inventory ? "Inventory " : "Equipment ") + " tags:") + .addCharValidator(FILTERED_CHARS) .onDone((newTags) -> clientThread.invoke(() -> { @@ -274,6 +278,7 @@ public class TabInterface { case NewTab.NEW_TAB: chatboxPanelManager.openTextInput("Tag name") + .addCharValidator(FILTERED_CHARS) .onDone((tagName) -> clientThread.invoke(() -> { if (!Strings.isNullOrEmpty(tagName)) @@ -286,7 +291,6 @@ public class TabInterface .build(); break; case NewTab.IMPORT_TAB: - try { final String dataString = Toolkit @@ -297,7 +301,24 @@ public class TabInterface .trim(); final Iterator dataIter = Text.fromCSV(dataString).iterator(); - final String name = dataIter.next(); + String name = dataIter.next(); + StringBuffer sb = new StringBuffer(); + for (char c : name.toCharArray()) + { + if (FILTERED_CHARS.test(c)) + { + sb.append(c); + } + } + + if (sb.length() == 0) + { + notifier.notify("Failed to import tag tab from clipboard, invalid format."); + return; + } + + name = sb.toString(); + final String icon = dataIter.next(); tabManager.setIcon(name, icon); @@ -785,6 +806,7 @@ public class TabInterface private void renameTab(String oldTag) { chatboxPanelManager.openTextInput("Enter new tag name for tag \"" + oldTag + "\":") + .addCharValidator(FILTERED_CHARS) .onDone((newTag) -> clientThread.invoke(() -> { if (!Strings.isNullOrEmpty(newTag) && !newTag.equalsIgnoreCase(oldTag)) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceCofferOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceCofferOverlay.java index 68c21f06e4..b74ab77d30 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceCofferOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceCofferOverlay.java @@ -40,7 +40,7 @@ import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.table.TableComponent; import net.runelite.client.ui.overlay.components.table.TableAlignment; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @Singleton class BlastFurnaceCofferOverlay extends Overlay @@ -78,7 +78,7 @@ class BlastFurnaceCofferOverlay extends Overlay { sack.setHidden(true); - tableComponent.addRow("Coffer:", StackFormatter.quantityToStackSize(client.getVar(BLAST_FURNACE_COFFER)) + " gp"); + tableComponent.addRow("Coffer:", QuantityFormatter.quantityToStackSize(client.getVar(BLAST_FURNACE_COFFER)) + " gp"); } if (!tableComponent.isEmpty()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java index bec6d21439..4d3a1e522c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java @@ -64,7 +64,7 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; import static net.runelite.api.util.Text.sanitize; import net.runelite.http.api.chat.ChatClient; import net.runelite.http.api.chat.Duels; @@ -861,11 +861,11 @@ public class ChatCommandsPlugin extends Plugin builder.append(ChatColorType.NORMAL); builder.append(": GE "); builder.append(ChatColorType.HIGHLIGHT); - builder.append(StackFormatter.formatNumber(itemPrice)); + builder.append(QuantityFormatter.formatNumber(itemPrice)); builder.append(ChatColorType.NORMAL); builder.append(": OSB "); builder.append(ChatColorType.HIGHLIGHT); - builder.append(StackFormatter.formatNumber(osbresult.getOverall_average())); + builder.append(QuantityFormatter.formatNumber(osbresult.getOverall_average())); ItemDefinition itemComposition = itemManager.getItemDefinition(itemId); if (itemComposition != null) @@ -875,7 +875,7 @@ public class ChatCommandsPlugin extends Plugin .append(ChatColorType.NORMAL) .append(" HA value ") .append(ChatColorType.HIGHLIGHT) - .append(StackFormatter.formatNumber(alchPrice)); + .append(QuantityFormatter.formatNumber(alchPrice)); } String response = builder.build(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java index 68d834420c..db729c4b6d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java @@ -216,7 +216,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc new CrypticClue("Search the drawers in the house next to the Port Sarim mage shop.", DRAWERS, new WorldPoint(3024, 3259, 0), "House east of Betty's. Contains a cooking sink."), new CrypticClue("With a name like that, you'd expect a little more than just a few scimitars.", "Daga", new WorldPoint(2759, 2775, 0), "Speak to Daga on Ape Atoll."), new CrypticClue("Strength potions with red spiders' eggs? He is quite a herbalist.", "Apothecary", new WorldPoint(3194, 3403, 0), "Talk to Apothecary in the South-western Varrock. (the) apothecary is just north-west of the Varrock Swordshop."), - new CrypticClue("Robin wishes to see your finest ranged equipment.", "Robin", new WorldPoint(3673, 3492, 0), "Robin at the inn in Port Phasmatys. Speak to him with +182 in ranged attack bonus."), + new CrypticClue("Robin wishes to see your finest ranged equipment.", "Robin", new WorldPoint(3673, 3492, 0), "Robin at the inn in Port Phasmatys. Speak to him with +182 in ranged attack bonus. Bonus granted by the toxic blowpipe is ignored."), new CrypticClue("You will need to under-cook to solve this one.", CRATE_357, new WorldPoint(3219, 9617, 0), "Search the crate in the Lumbridge basement."), new CrypticClue("Search through some drawers found in Taverley's houses.", DRAWERS_350, new WorldPoint(2894, 3418, 0), "The south-eastern most house, south of Jatix's Herblore Shop."), new CrypticClue("Anger Abbot Langley.", "Abbot Langley", new WorldPoint(3058, 3487, 0), "Speak to Abbot Langley in the Edgeville Monastery while you have a negative prayer bonus (currently only possible with an Ancient staff)."), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java index 4c54e03458..677e969181 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java @@ -58,7 +58,7 @@ import net.runelite.client.eventbus.EventBus; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; import net.runelite.http.api.examine.ExamineClient; import net.runelite.http.api.osbuddy.OSBGrandExchangeClient; @@ -388,7 +388,7 @@ public class ExaminePlugin extends Plugin if (quantity > 1) { message - .append(StackFormatter.formatNumber(quantity)) + .append(QuantityFormatter.formatNumber(quantity)) .append(" x "); } @@ -410,7 +410,7 @@ public class ExaminePlugin extends Plugin .append(ChatColorType.NORMAL) .append(" GE ") .append(ChatColorType.HIGHLIGHT) - .append(StackFormatter.formatNumber(gePrice * finalQuantity)); + .append(QuantityFormatter.formatNumber(gePrice * finalQuantity)); if (osbresult != null) { @@ -418,7 +418,7 @@ public class ExaminePlugin extends Plugin .append(ChatColorType.NORMAL) .append(" OSB ") .append(ChatColorType.HIGHLIGHT) - .append(StackFormatter.formatNumber(osbresult.getOverall_average() * finalQuantity)); + .append(QuantityFormatter.formatNumber(osbresult.getOverall_average() * finalQuantity)); } if (finalQuantity > 1) @@ -427,7 +427,7 @@ public class ExaminePlugin extends Plugin .append(ChatColorType.NORMAL) .append(" (") .append(ChatColorType.HIGHLIGHT) - .append(StackFormatter.formatNumber(gePrice)) + .append(QuantityFormatter.formatNumber(gePrice)) .append(ChatColorType.NORMAL) .append("ea)"); } @@ -436,7 +436,7 @@ public class ExaminePlugin extends Plugin .append(ChatColorType.NORMAL) .append(" HA value ") .append(ChatColorType.HIGHLIGHT) - .append(StackFormatter.formatNumber(alchPrice * finalQuantity)); + .append(QuantityFormatter.formatNumber(alchPrice * finalQuantity)); if (finalQuantity > 1) { @@ -444,7 +444,7 @@ public class ExaminePlugin extends Plugin .append(ChatColorType.NORMAL) .append(" (") .append(ChatColorType.HIGHLIGHT) - .append(StackFormatter.formatNumber(alchPrice)) + .append(QuantityFormatter.formatNumber(alchPrice)) .append(ChatColorType.NORMAL) .append("ea)"); } @@ -463,7 +463,7 @@ public class ExaminePlugin extends Plugin .append(ChatColorType.NORMAL) .append(" HA value ") .append(ChatColorType.HIGHLIGHT) - .append(StackFormatter.formatNumber(alchPrice * quantity)); + .append(QuantityFormatter.formatNumber(alchPrice * quantity)); if (quantity > 1) { @@ -471,7 +471,7 @@ public class ExaminePlugin extends Plugin .append(ChatColorType.NORMAL) .append(" (") .append(ChatColorType.HIGHLIGHT) - .append(StackFormatter.formatNumber(alchPrice)) + .append(QuantityFormatter.formatNumber(alchPrice)) .append(ChatColorType.NORMAL) .append("ea)"); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java index 21c42aafc5..9d119fcb46 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java @@ -43,7 +43,7 @@ import javax.swing.border.EmptyBorder; import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.ui.ColorScheme; import net.runelite.client.util.LinkBrowser; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; /** * This panel displays an individual item result in the @@ -126,7 +126,7 @@ class GrandExchangeItemPanel extends JPanel JLabel gePriceLabel = new JLabel(); if (gePrice > 0) { - gePriceLabel.setText(StackFormatter.formatNumber(gePrice) + " gp"); + gePriceLabel.setText(QuantityFormatter.formatNumber(gePrice) + " gp"); } else { @@ -141,13 +141,13 @@ class GrandExchangeItemPanel extends JPanel // Alch price JLabel haPriceLabel = new JLabel(); - haPriceLabel.setText(StackFormatter.formatNumber(haPrice) + " alch"); + haPriceLabel.setText(QuantityFormatter.formatNumber(haPrice) + " alch"); haPriceLabel.setForeground(ColorScheme.GRAND_EXCHANGE_ALCH); alchAndLimitPanel.add(haPriceLabel, BorderLayout.WEST); // GE Limit JLabel geLimitLabel = new JLabel(); - String limitLabelText = geItemLimit == 0 ? "" : "Limit " + StackFormatter.formatNumber(geItemLimit); + String limitLabelText = geItemLimit == 0 ? "" : "Limit " + QuantityFormatter.formatNumber(geItemLimit); geLimitLabel.setText(limitLabelText); geLimitLabel.setForeground(ColorScheme.GRAND_EXCHANGE_LIMIT); geLimitLabel.setBorder(new CompoundBorder(geLimitLabel.getBorder(), new EmptyBorder(0, 0, 0, 7))); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlot.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlot.java index 39f628e151..b90a1b05d5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlot.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlot.java @@ -57,7 +57,7 @@ import net.runelite.client.ui.FontManager; import net.runelite.client.ui.components.ThinProgressBar; import net.runelite.client.util.ColorUtil; import net.runelite.client.util.ImageUtil; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @Singleton class GrandExchangeOfferSlot extends JPanel @@ -228,17 +228,17 @@ class GrandExchangeOfferSlot extends JPanel || newOffer.getState() == GrandExchangeOfferState.CANCELLED_BUY; String offerState = (buying ? "Bought " : "Sold ") - + StackFormatter.quantityToRSDecimalStack(newOffer.getQuantitySold()) + " / " - + StackFormatter.quantityToRSDecimalStack(newOffer.getTotalQuantity()); + + QuantityFormatter.quantityToRSDecimalStack(newOffer.getQuantitySold()) + " / " + + QuantityFormatter.quantityToRSDecimalStack(newOffer.getTotalQuantity()); offerInfo.setText(offerState); - itemPrice.setText(htmlLabel("Price each: ", StackFormatter.formatNumber(newOffer.getPrice()))); + itemPrice.setText(htmlLabel("Price each: ", QuantityFormatter.formatNumber(newOffer.getPrice()))); String action = buying ? "Spent: " : "Received: "; - offerSpent.setText(htmlLabel(action, StackFormatter.formatNumber(newOffer.getSpent()) + " / " - + StackFormatter.formatNumber(newOffer.getPrice() * newOffer.getTotalQuantity()))); + offerSpent.setText(htmlLabel(action, QuantityFormatter.formatNumber(newOffer.getSpent()) + " / " + + QuantityFormatter.formatNumber(newOffer.getPrice() * newOffer.getTotalQuantity()))); progressBar.setForeground(getProgressColor(newOffer)); progressBar.setMaximumValue(newOffer.getTotalQuantity()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java index 79323c9290..51eea405fc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java @@ -83,7 +83,7 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; import net.runelite.client.util.ImageUtil; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; import net.runelite.api.util.Text; import net.runelite.http.api.RuneLiteAPI; import net.runelite.http.api.ge.GrandExchangeClient; @@ -504,11 +504,11 @@ public class GrandExchangePlugin extends Plugin if (config.showExact()) { - titleBuilder.append(StackFormatter.formatNumber(total)); + titleBuilder.append(QuantityFormatter.formatNumber(total)); } else { - titleBuilder.append(StackFormatter.quantityToStackSize(total)); + titleBuilder.append(QuantityFormatter.quantityToStackSize(total)); } titleBuilder.append(')'); @@ -573,7 +573,7 @@ public class GrandExchangePlugin extends Plugin // If we have item buy limit, append it if (itemLimit != null) { - final String text = geText.getText() + BUY_LIMIT_GE_TEXT + StackFormatter.formatNumber(itemLimit); + final String text = geText.getText() + BUY_LIMIT_GE_TEXT + QuantityFormatter.formatNumber(itemLimit); geText.setText(text); } } @@ -600,7 +600,7 @@ public class GrandExchangePlugin extends Plugin .subscribe( (osbresult) -> { - final String text = geText.getText() + OSB_GE_TEXT + StackFormatter.formatNumber(osbresult.getOverall_average()); + final String text = geText.getText() + OSB_GE_TEXT + QuantityFormatter.formatNumber(osbresult.getOverall_average()); if (geText.getText().contains(OSB_GE_TEXT)) { // If there are multiple tasks queued and one of them have already added the price diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java index 04a0ef5f99..0d301b5614 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java @@ -59,7 +59,7 @@ import net.runelite.client.ui.overlay.OverlayUtil; import net.runelite.client.ui.overlay.components.BackgroundComponent; import net.runelite.client.ui.overlay.components.ProgressPieComponent; import net.runelite.client.ui.overlay.components.TextComponent; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @Singleton public class GroundItemsOverlay extends Overlay @@ -270,7 +270,7 @@ public class GroundItemsOverlay extends Overlay else { itemStringBuilder.append(" (") - .append(StackFormatter.quantityToStackSize(item.getQuantity())) + .append(QuantityFormatter.quantityToStackSize(item.getQuantity())) .append(")"); } } @@ -280,14 +280,14 @@ public class GroundItemsOverlay extends Overlay if (item.getGePrice() > 0) { itemStringBuilder.append(" (EX: ") - .append(StackFormatter.quantityToStackSize(item.getGePrice())) + .append(QuantityFormatter.quantityToStackSize(item.getGePrice())) .append(" gp)"); } if (item.getHaPrice() > 0) { itemStringBuilder.append(" (HA: ") - .append(StackFormatter.quantityToStackSize(item.getHaPrice())) + .append(QuantityFormatter.quantityToStackSize(item.getHaPrice())) .append(" gp)"); } } @@ -301,7 +301,7 @@ public class GroundItemsOverlay extends Overlay { itemStringBuilder .append(" (") - .append(StackFormatter.quantityToStackSize(price)) + .append(QuantityFormatter.quantityToStackSize(price)) .append(" gp)"); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java index 7ea70f2bfc..35faedbe02 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java @@ -100,7 +100,7 @@ import net.runelite.client.plugins.grounditems.config.TimerDisplayMode; import net.runelite.client.plugins.grounditems.config.ValueCalculationMode; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ColorUtil; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @PluginDescriptor( name = "Ground Items", @@ -1213,7 +1213,7 @@ public class GroundItemsPlugin extends Plugin else { notificationStringBuilder.append(" (") - .append(StackFormatter.quantityToStackSize(item.getQuantity())) + .append(QuantityFormatter.quantityToStackSize(item.getQuantity())) .append(")"); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java index 74183220d1..96de9a63f8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java @@ -60,7 +60,7 @@ import net.runelite.client.ui.components.IconTextField; import net.runelite.client.ui.components.materialtabs.MaterialTab; import net.runelite.client.ui.components.materialtabs.MaterialTabGroup; import net.runelite.client.util.ImageUtil; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; import net.runelite.http.api.hiscore.HiscoreClient; import net.runelite.http.api.hiscore.HiscoreEndpoint; import net.runelite.http.api.hiscore.HiscoreResult; @@ -512,8 +512,8 @@ public class HiscorePanel extends PluginPanel + result.getRanged().getExperience() + result.getPrayer().getExperience(); content += "

Skill: Combat

"; - content += "

Exact Combat Level: " + StackFormatter.formatNumber(combatLevel) + "

"; - content += "

Experience: " + StackFormatter.formatNumber(combatExperience) + "

"; + content += "

Exact Combat Level: " + QuantityFormatter.formatNumber(combatLevel) + "

"; + content += "

Experience: " + QuantityFormatter.formatNumber(combatExperience) + "

"; } else { @@ -521,20 +521,20 @@ public class HiscorePanel extends PluginPanel { case CLUE_SCROLL_ALL: { - String allRank = (result.getClueScrollAll().getRank() == -1) ? "Unranked" : StackFormatter.formatNumber(result.getClueScrollAll().getRank()); - String beginnerRank = (result.getClueScrollBeginner().getRank() == -1) ? "Unranked" : StackFormatter.formatNumber(result.getClueScrollBeginner().getRank()); - String easyRank = (result.getClueScrollEasy().getRank() == -1) ? "Unranked" : StackFormatter.formatNumber(result.getClueScrollEasy().getRank()); - String mediumRank = (result.getClueScrollMedium().getRank() == -1) ? "Unranked" : StackFormatter.formatNumber(result.getClueScrollMedium().getRank()); - String hardRank = (result.getClueScrollHard().getRank() == -1) ? "Unranked" : StackFormatter.formatNumber(result.getClueScrollHard().getRank()); - String eliteRank = (result.getClueScrollElite().getRank() == -1) ? "Unranked" : StackFormatter.formatNumber(result.getClueScrollElite().getRank()); - String masterRank = (result.getClueScrollMaster().getRank() == -1) ? "Unranked" : StackFormatter.formatNumber(result.getClueScrollMaster().getRank()); - String all = (result.getClueScrollAll().getLevel() == -1 ? "0" : StackFormatter.formatNumber(result.getClueScrollAll().getLevel())); - String beginner = (result.getClueScrollBeginner().getLevel() == -1 ? "0" : StackFormatter.formatNumber(result.getClueScrollBeginner().getLevel())); - String easy = (result.getClueScrollEasy().getLevel() == -1 ? "0" : StackFormatter.formatNumber(result.getClueScrollEasy().getLevel())); - String medium = (result.getClueScrollMedium().getLevel() == -1 ? "0" : StackFormatter.formatNumber(result.getClueScrollMedium().getLevel())); - String hard = (result.getClueScrollHard().getLevel() == -1 ? "0" : StackFormatter.formatNumber(result.getClueScrollHard().getLevel())); - String elite = (result.getClueScrollElite().getLevel() == -1 ? "0" : StackFormatter.formatNumber(result.getClueScrollElite().getLevel())); - String master = (result.getClueScrollMaster().getLevel() == -1 ? "0" : StackFormatter.formatNumber(result.getClueScrollMaster().getLevel())); + String allRank = (result.getClueScrollAll().getRank() == -1) ? "Unranked" : QuantityFormatter.formatNumber(result.getClueScrollAll().getRank()); + String beginnerRank = (result.getClueScrollBeginner().getRank() == -1) ? "Unranked" : QuantityFormatter.formatNumber(result.getClueScrollBeginner().getRank()); + String easyRank = (result.getClueScrollEasy().getRank() == -1) ? "Unranked" : QuantityFormatter.formatNumber(result.getClueScrollEasy().getRank()); + String mediumRank = (result.getClueScrollMedium().getRank() == -1) ? "Unranked" : QuantityFormatter.formatNumber(result.getClueScrollMedium().getRank()); + String hardRank = (result.getClueScrollHard().getRank() == -1) ? "Unranked" : QuantityFormatter.formatNumber(result.getClueScrollHard().getRank()); + String eliteRank = (result.getClueScrollElite().getRank() == -1) ? "Unranked" : QuantityFormatter.formatNumber(result.getClueScrollElite().getRank()); + String masterRank = (result.getClueScrollMaster().getRank() == -1) ? "Unranked" : QuantityFormatter.formatNumber(result.getClueScrollMaster().getRank()); + String all = (result.getClueScrollAll().getLevel() == -1 ? "0" : QuantityFormatter.formatNumber(result.getClueScrollAll().getLevel())); + String beginner = (result.getClueScrollBeginner().getLevel() == -1 ? "0" : QuantityFormatter.formatNumber(result.getClueScrollBeginner().getLevel())); + String easy = (result.getClueScrollEasy().getLevel() == -1 ? "0" : QuantityFormatter.formatNumber(result.getClueScrollEasy().getLevel())); + String medium = (result.getClueScrollMedium().getLevel() == -1 ? "0" : QuantityFormatter.formatNumber(result.getClueScrollMedium().getLevel())); + String hard = (result.getClueScrollHard().getLevel() == -1 ? "0" : QuantityFormatter.formatNumber(result.getClueScrollHard().getLevel())); + String elite = (result.getClueScrollElite().getLevel() == -1 ? "0" : QuantityFormatter.formatNumber(result.getClueScrollElite().getLevel())); + String master = (result.getClueScrollMaster().getLevel() == -1 ? "0" : QuantityFormatter.formatNumber(result.getClueScrollMaster().getLevel())); content += "

All: " + all + " Rank: " + allRank + "

"; content += "

Beginner: " + beginner + " Rank: " + beginnerRank + "

"; content += "

Easy: " + easy + " Rank: " + easyRank + "

"; @@ -546,27 +546,27 @@ public class HiscorePanel extends PluginPanel } case BOUNTY_HUNTER_ROGUE: { - String rank = (result.getBountyHunterRogue().getRank() == -1) ? "Unranked" : StackFormatter.formatNumber(result.getBountyHunterRogue().getRank()); + String rank = (result.getBountyHunterRogue().getRank() == -1) ? "Unranked" : QuantityFormatter.formatNumber(result.getBountyHunterRogue().getRank()); content += "

Rank: " + rank + "

"; break; } case BOUNTY_HUNTER_HUNTER: { - String rank = (result.getBountyHunterHunter().getRank() == -1) ? "Unranked" : StackFormatter.formatNumber(result.getBountyHunterHunter().getRank()); + String rank = (result.getBountyHunterHunter().getRank() == -1) ? "Unranked" : QuantityFormatter.formatNumber(result.getBountyHunterHunter().getRank()); content += "

Rank: " + rank + "

"; break; } case LAST_MAN_STANDING: { - String rank = (result.getLastManStanding().getRank() == -1) ? "Unranked" : StackFormatter.formatNumber(result.getLastManStanding().getRank()); + String rank = (result.getLastManStanding().getRank() == -1) ? "Unranked" : QuantityFormatter.formatNumber(result.getLastManStanding().getRank()); content += "

Rank: " + rank + "

"; break; } case OVERALL: { Skill requestedSkill = result.getSkill(skill); - String rank = (requestedSkill.getRank() == -1) ? "Unranked" : StackFormatter.formatNumber(requestedSkill.getRank()); - String exp = (requestedSkill.getExperience() == -1L) ? "Unranked" : StackFormatter.formatNumber(requestedSkill.getExperience()); + String rank = (requestedSkill.getRank() == -1) ? "Unranked" : QuantityFormatter.formatNumber(requestedSkill.getRank()); + String exp = (requestedSkill.getExperience() == -1L) ? "Unranked" : QuantityFormatter.formatNumber(requestedSkill.getExperience()); content += "

Skill: " + skill.getName() + "

"; content += "

Rank: " + rank + "

"; content += "

Experience: " + exp + "

"; @@ -577,8 +577,8 @@ public class HiscorePanel extends PluginPanel Skill requestedSkill = result.getSkill(skill); final long experience = requestedSkill.getExperience(); - String rank = (requestedSkill.getRank() == -1) ? "Unranked" : StackFormatter.formatNumber(requestedSkill.getRank()); - String exp = (experience == -1L) ? "Unranked" : StackFormatter.formatNumber(experience); + String rank = (requestedSkill.getRank() == -1) ? "Unranked" : QuantityFormatter.formatNumber(requestedSkill.getRank()); + String exp = (experience == -1L) ? "Unranked" : QuantityFormatter.formatNumber(experience); String remainingXp; if (experience == -1L) { @@ -587,7 +587,7 @@ public class HiscorePanel extends PluginPanel else { int currentLevel = Experience.getLevelForXp((int) experience); - remainingXp = (currentLevel + 1 <= Experience.MAX_VIRT_LEVEL) ? StackFormatter.formatNumber(Experience.getXpForLevel(currentLevel + 1) - experience) : "0"; + remainingXp = (currentLevel + 1 <= Experience.MAX_VIRT_LEVEL) ? QuantityFormatter.formatNumber(Experience.getXpForLevel(currentLevel + 1) - experience) : "0"; } content += "

Skill: " + skill.getName() + "

"; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesOverlay.java index 227f015136..861f04cdb7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesOverlay.java @@ -46,7 +46,7 @@ import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.tooltip.Tooltip; import net.runelite.client.ui.overlay.tooltip.TooltipManager; import net.runelite.client.util.ColorUtil; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @Singleton class ItemPricesOverlay extends Overlay @@ -185,11 +185,11 @@ class ItemPricesOverlay extends Overlay // Special case for coins and platinum tokens if (id == ItemID.COINS_995) { - return StackFormatter.formatNumber(qty) + " gp"; + return QuantityFormatter.formatNumber(qty) + " gp"; } else if (id == ItemID.PLATINUM_TOKEN) { - return StackFormatter.formatNumber(qty * 1000) + " gp"; + return QuantityFormatter.formatNumber(qty * 1000) + " gp"; } ItemDefinition itemDef = itemManager.getItemDefinition(id); @@ -236,12 +236,12 @@ class ItemPricesOverlay extends Overlay if (gePrice > 0) { itemStringBuilder.append("EX: ") - .append(StackFormatter.quantityToStackSize(gePrice * qty)) + .append(QuantityFormatter.quantityToStackSize(gePrice * qty)) .append(" gp"); if (plugin.isShowEA() && qty > 1) { itemStringBuilder.append(" (") - .append(StackFormatter.quantityToStackSize(gePrice)) + .append(QuantityFormatter.quantityToStackSize(gePrice)) .append(" ea)"); } } @@ -253,12 +253,12 @@ class ItemPricesOverlay extends Overlay } itemStringBuilder.append("HA: ") - .append(StackFormatter.quantityToStackSize(haValue * qty)) + .append(QuantityFormatter.quantityToStackSize(haValue * qty)) .append(" gp"); if (plugin.isShowEA() && qty > 1) { itemStringBuilder.append(" (") - .append(StackFormatter.quantityToStackSize(haValue)) + .append(QuantityFormatter.quantityToStackSize(haValue)) .append(" ea)"); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java index fb986e27f7..8d80b5cf13 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java @@ -62,7 +62,7 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemMapping; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @PluginDescriptor( name = "Items Kept on Death", @@ -586,7 +586,7 @@ public class ItemsKeptOnDeathPlugin extends Plugin total += (long) price * w.getItemQuantity(); } final Widget lostValue = client.getWidget(WidgetInfo.ITEMS_LOST_VALUE); - lostValue.setText(StackFormatter.quantityToStackSize(total) + " gp"); + lostValue.setText(QuantityFormatter.quantityToStackSize(total) + " gp"); // Update Max items kept final Widget max = client.getWidget(WidgetInfo.ITEMS_KEPT_MAX); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java index 06dbfe1c50..31b21fa9d0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java @@ -65,7 +65,7 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.JagexColors; import net.runelite.client.ui.overlay.OverlayManager; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; import net.runelite.http.api.item.ItemEquipmentStats; import net.runelite.http.api.item.ItemStats; @@ -376,7 +376,7 @@ public class ItemStatPlugin extends Plugin createSeparator(invContainer, invContainer.getHeight() - 40); - final String coinText = "You have " + StackFormatter.quantityToRSStackSize(getCurrentGP()) + final String coinText = "You have " + QuantityFormatter.quantityToStackSize(getCurrentGP()) + (getCurrentGP() == 1 ? " coin." : " coins."); final Widget coinWidget = createText(invContainer, coinText, FontID.PLAIN_12, ORANGE_TEXT, diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomCounter.java b/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomCounter.java index cdf5dfe093..a89b8e84c4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomCounter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomCounter.java @@ -28,7 +28,7 @@ package net.runelite.client.plugins.kingdomofmiscellania; import java.awt.image.BufferedImage; import javax.inject.Singleton; import net.runelite.client.ui.overlay.infobox.Counter; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @Singleton class KingdomCounter extends Counter @@ -55,7 +55,7 @@ class KingdomCounter extends Counter .append("/127") .append("
") .append("Coffer: ") - .append(StackFormatter.quantityToRSStackSize(plugin.getCoffer())) + .append(QuantityFormatter.quantityToStackSize(plugin.getCoffer())) .toString(); } } 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 deb16a2083..3fd9374b10 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 @@ -55,8 +55,8 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.FontManager; import net.runelite.client.util.ImageUtil; -import net.runelite.client.util.StackFormatter; import net.runelite.api.util.Text; +import net.runelite.client.util.QuantityFormatter; class LootTrackerBox extends JPanel { @@ -200,8 +200,8 @@ class LootTrackerBox extends JPanel { buildItems(); - priceLabel.setText(StackFormatter.quantityToStackSize(totalPrice) + " gp"); - priceLabel.setToolTipText(StackFormatter.formatNumber(totalPrice) + " gp"); + priceLabel.setText(QuantityFormatter.quantityToStackSize(totalPrice) + " gp"); + priceLabel.setToolTipText(QuantityFormatter.formatNumber(totalPrice) + " gp"); final long kills = getTotalKills(); if (kills > 1) @@ -373,6 +373,6 @@ class LootTrackerBox extends JPanel final int quantity = item.getQuantity(); final long price = item.getPrice(); final String ignoredLabel = item.isIgnored() ? " - Ignored" : ""; - return name + " x " + quantity + " (" + StackFormatter.quantityToStackSize(price) + ") " + ignoredLabel; + return name + " x " + quantity + " (" + QuantityFormatter.quantityToStackSize(price) + ") " + ignoredLabel; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java index a096673519..16e0099c2b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java @@ -60,7 +60,7 @@ import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.components.PluginErrorPanel; import net.runelite.client.util.ColorUtil; import net.runelite.client.util.ImageUtil; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; import net.runelite.http.api.loottracker.LootTrackerClient; @Slf4j @@ -825,7 +825,7 @@ class LootTrackerPanel extends PluginPanel private static String htmlLabel(String key, long value) { - final String valueStr = StackFormatter.quantityToStackSize(value); + final String valueStr = QuantityFormatter.quantityToStackSize(value); return String.format(HTML_LABEL_TEMPLATE, ColorUtil.toHexColor(ColorScheme.LIGHT_GRAY_COLOR), key, valueStr); } } 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 79676a80cf..da4639a628 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 @@ -118,8 +118,8 @@ import net.runelite.client.task.Schedule; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; import net.runelite.client.util.ImageUtil; -import net.runelite.client.util.StackFormatter; import net.runelite.api.util.Text; +import net.runelite.client.util.QuantityFormatter; import net.runelite.http.api.RuneLiteAPI; import net.runelite.http.api.loottracker.GameItem; import net.runelite.http.api.loottracker.LootRecord; @@ -627,7 +627,7 @@ public class LootTrackerPlugin extends Plugin if (WorldType.isDeadmanWorld(client.getWorldType()) || WorldType.isHighRiskWorld(client.getWorldType()) || WorldType.isPvpWorld(client.getWorldType()) || client.getVar(Varbits.IN_WILDERNESS) == 1) { - final String totalValue = StackFormatter.quantityToRSStackSize(playerLootReceived.getItems().stream() + final String totalValue = QuantityFormatter.quantityToStackSize(playerLootReceived.getItems().stream() .mapToInt(itemStack -> itemManager.getItemPrice(itemStack.getId()) * itemStack.getQuantity()).sum()); chatMessageManager.queue(QueuedMessage.builder().type(ChatMessageType.CONSOLE).runeLiteFormattedMessage( @@ -725,7 +725,7 @@ public class LootTrackerPlugin extends Plugin final ChatMessageBuilder message = new ChatMessageBuilder() .append(ChatColorType.HIGHLIGHT) .append("Your loot is worth around ") - .append(StackFormatter.formatNumber(chestPrice)) + .append(QuantityFormatter.formatNumber(chestPrice)) .append(" coins.") .append(ChatColorType.NORMAL); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java index fa450f95f1..e01c7615cf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java @@ -45,7 +45,7 @@ import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.table.TableAlignment; import net.runelite.client.ui.overlay.components.table.TableComponent; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @Singleton class NightmareZoneOverlay extends Overlay @@ -109,12 +109,12 @@ class NightmareZoneOverlay extends Overlay TableComponent tableComponent = new TableComponent(); tableComponent.setColumnAlignments(TableAlignment.LEFT, TableAlignment.RIGHT); - tableComponent.addRow("Points:", StackFormatter.formatNumber(currentPoints)); - tableComponent.addRow("Points/Hour:", StackFormatter.formatNumber(plugin.getPointsPerHour())); + tableComponent.addRow("Points:", QuantityFormatter.formatNumber(currentPoints)); + tableComponent.addRow("Points/Hour:", QuantityFormatter.formatNumber(plugin.getPointsPerHour())); if (plugin.isShowtotalpoints()) { - tableComponent.addRow("Total:", StackFormatter.formatNumber(totalPoints)); + tableComponent.addRow("Total:", QuantityFormatter.formatNumber(totalPoints)); } panelComponent.getChildren().add(tableComponent); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerscouter/PlayerScouter.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerscouter/PlayerScouter.java index 26a42483b7..b1f62106c8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerscouter/PlayerScouter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerscouter/PlayerScouter.java @@ -69,7 +69,7 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; import net.runelite.client.util.PvPUtil; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; import net.runelite.http.api.discord.DiscordClient; import net.runelite.http.api.discord.DiscordEmbed; import net.runelite.http.api.discord.DiscordMessage; @@ -495,7 +495,7 @@ public class PlayerScouter extends Plugin fieldList.add(FieldEmbed.builder() .name("Risk") - .value(StackFormatter.quantityToRSDecimalStack(player.getRisk())) + .value(QuantityFormatter.quantityToRSDecimalStack(player.getRisk())) .inline(true) .build()); @@ -561,7 +561,7 @@ public class PlayerScouter extends Plugin fieldList.add(FieldEmbed.builder() .name(name) - .value("Value: " + StackFormatter.quantityToRSDecimalStack(value)) + .value("Value: " + QuantityFormatter.quantityToRSDecimalStack(value)) .inline(true) .build()); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pvptools/PvpToolsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pvptools/PvpToolsPlugin.java index cf7a3fceba..90a1a17de7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pvptools/PvpToolsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pvptools/PvpToolsPlugin.java @@ -63,8 +63,8 @@ import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.util.HotkeyListener; import net.runelite.client.util.ImageUtil; import net.runelite.client.util.PvPUtil; -import static net.runelite.client.util.StackFormatter.quantityToRSDecimalStack; import net.runelite.api.util.Text; +import net.runelite.client.util.QuantityFormatter; import org.apache.commons.lang3.ArrayUtils; @PluginDescriptor( @@ -536,7 +536,7 @@ public class PvpToolsPlugin extends Plugin } wealth += value; } - panel.totalRiskLabel.setText(htmlLabel("Total risk: ", quantityToRSDecimalStack(wealth))); + panel.totalRiskLabel.setText(htmlLabel("Total risk: ", QuantityFormatter.quantityToRSDecimalStack(wealth))); panel.totalRiskLabel.repaint(); int itemLimit = 0; @@ -572,7 +572,7 @@ public class PvpToolsPlugin extends Plugin } } panel.riskProtectingItem.setText(htmlLabel("Risk Protecting Item: ", - quantityToRSDecimalStack(descendingMap.keySet().stream().mapToInt(Integer::intValue).sum()))); + QuantityFormatter.quantityToRSDecimalStack(descendingMap.keySet().stream().mapToInt(Integer::intValue).sum()))); panel.riskProtectingItem.repaint(); panel.biggestItemLabel.setText("Most Valuable Item: "); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventConfig.java new file mode 100644 index 0000000000..5d5abf8dca --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventConfig.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2018, trimbe + * 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.plugins.randomevents; + +import net.runelite.client.config.Config; +import net.runelite.client.config.ConfigGroup; +import net.runelite.client.config.ConfigItem; + +@ConfigGroup("randomevents") +public interface RandomEventConfig extends Config +{ + @ConfigItem( + keyName = "removeMenuOptions", + name = "Remove others' menu options", + description = "Remove menu options from random events for other players.", + position = 0 + ) + default boolean removeMenuOptions() + { + return true; + } + + @ConfigItem( + keyName = "notifyDunce", + name = "Notify on Surprise Exam", + description = "", + position = 1 + ) + default boolean notifyDunce() + { + return false; + } + + @ConfigItem( + keyName = "notifyGenie", + name = "Notify on Genie", + description = "", + position = 2 + ) + default boolean notifyGenie() + { + return false; + } + + @ConfigItem( + keyName = "notifyDemon", + name = "Notify on Drill Demon", + description = "", + position = 3 + ) + default boolean notifyDemon() + { + return false; + } + + @ConfigItem( + keyName = "notifyForester", + name = "Notify on Freaky Forester", + description = "", + position = 4 + ) + default boolean notifyForester() + { + return false; + } + + @ConfigItem( + keyName = "notifyFrog", + name = "Notify on Kiss the Frog", + description = "", + position = 5 + ) + default boolean notifyFrog() + { + return false; + } + + @ConfigItem( + keyName = "notifyGravedigger", + name = "Notify on Gravedigger", + description = "", + position = 6 + ) + default boolean notifyGravedigger() + { + return false; + } + + @ConfigItem( + keyName = "notifyMoM", + name = "Notify on Mysterious Old Man", + description = "", + position = 7 + ) + default boolean notifyMoM() + { + return false; + } + + @ConfigItem( + keyName = "notifyBob", + name = "Notify on Evil Bob", + description = "", + position = 8 + ) + default boolean notifyBob() + { + return false; + } + + @ConfigItem( + keyName = "notifyQuiz", + name = "Notify on Quiz Master", + description = "", + position = 9 + ) + default boolean notifyQuiz() + { + return false; + } + + @ConfigItem( + keyName = "notifyAll", + name = "Notify for all events", + description = "", + position = 10 + ) + default boolean notifyAllEvents() + { + return false; + } +} + diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java new file mode 100644 index 0000000000..fc0afadc7e --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2018, trimbe + * 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.plugins.randomevents; + +import com.google.common.collect.ImmutableSet; +import com.google.inject.Provides; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import javax.inject.Inject; +import net.runelite.api.Actor; +import net.runelite.api.Client; +import net.runelite.api.MenuOpcode; +import net.runelite.api.NPC; +import net.runelite.api.NpcID; +import net.runelite.api.Player; +import net.runelite.api.events.ConfigChanged; +import net.runelite.api.events.GameTick; +import net.runelite.api.events.InteractingChanged; +import net.runelite.api.events.MenuEntryAdded; +import net.runelite.api.events.NpcSpawned; +import net.runelite.client.Notifier; +import net.runelite.client.config.ConfigManager; +import net.runelite.client.eventbus.EventBus; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.plugins.PluginDescriptor; + +@PluginDescriptor( + name = "Random Events", + description = "Notify when random events appear and remove talk/dismiss options on events that aren't yours.", + enabledByDefault = false +) +public class RandomEventPlugin extends Plugin +{ + private static final Set EVENT_NPCS = ImmutableSet.of( + NpcID.DR_JEKYLL, NpcID.DR_JEKYLL_314, + NpcID.BEE_KEEPER_6747, + NpcID.CAPT_ARNAV, + NpcID.SERGEANT_DAMIEN_6743, + NpcID.DRUNKEN_DWARF, + NpcID.FREAKY_FORESTER_6748, + NpcID.GENIE, NpcID.GENIE_327, + NpcID.EVIL_BOB, NpcID.EVIL_BOB_6754, + NpcID.POSTIE_PETE_6738, + NpcID.LEO_6746, + NpcID.MYSTERIOUS_OLD_MAN_6750, NpcID.MYSTERIOUS_OLD_MAN_6751, + NpcID.MYSTERIOUS_OLD_MAN_6752, NpcID.MYSTERIOUS_OLD_MAN_6753, + NpcID.PILLORY_GUARD, + NpcID.FLIPPA_6744, + NpcID.QUIZ_MASTER_6755, + NpcID.RICK_TURPENTINE, NpcID.RICK_TURPENTINE_376, + NpcID.SANDWICH_LADY, + NpcID.DUNCE_6749, + NpcID.NILES, NpcID.NILES_5439, + NpcID.MILES, NpcID.MILES_5440, + NpcID.GILES, NpcID.GILES_5441, + NpcID.FROG_5429 + ); + private static final Set EVENT_OPTIONS = ImmutableSet.of( + "Talk-to", + "Dismiss" + ); + private static final int RANDOM_EVENT_TIMEOUT = 150; + + private Map spawnedNpcs = new HashMap<>(); + private NPC currentRandomEvent; + // event npcs teleport to you to stay in range, we need to throttle spawns + private int lastEventTick = -RANDOM_EVENT_TIMEOUT; + + @Inject + private Client client; + + @Inject + private Notifier notifier; + + @Inject + private RandomEventConfig config; + + @Inject + private EventBus eventBus; + + private boolean notifyAllEvents; + private boolean notifyDemon; + private boolean notifyForester; + private boolean notifyFrog; + private boolean notifyGenie; + private boolean notifyBob; + private boolean notifyGravedigger; + private boolean notifyMoM; + private boolean notifyQuiz; + private boolean notifyDunce; + + @Provides + RandomEventConfig getConfig(ConfigManager configManager) + { + return configManager.getConfig(RandomEventConfig.class); + } + + @Override + protected void startUp() throws Exception + { + updateConfig(); + addSubscriptions(); + } + + @Override + protected void shutDown() throws Exception + { + eventBus.unregister(this); + + lastEventTick = 0; + currentRandomEvent = null; + spawnedNpcs.clear(); + } + + private void addSubscriptions() + { + eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); + eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged); + eventBus.subscribe(GameTick.class, this, this::onGameTick); + eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); + eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); + } + + + private void onNpcSpawned(NpcSpawned event) + { + NPC npc = event.getNpc(); + + if (!EVENT_NPCS.contains(npc.getId())) + { + return; + } + + // only occasionally do event npcs spawn with non-null interacting + if (npc.getInteracting() == client.getLocalPlayer()) + { + if (client.getTickCount() - lastEventTick > RANDOM_EVENT_TIMEOUT) + { + currentRandomEvent = npc; + lastEventTick = client.getTickCount(); + } + } + else + { + spawnedNpcs.put(npc, client.getTickCount()); + } + } + + private void onInteractingChanged(InteractingChanged event) + { + Actor source = event.getSource(); + Actor target = event.getTarget(); + + if (spawnedNpcs.containsKey(source)) + { + Player player = client.getLocalPlayer(); + if (player == target && client.getTickCount() - lastEventTick > RANDOM_EVENT_TIMEOUT) + { + currentRandomEvent = (NPC) source; + if (shouldNotify(currentRandomEvent.getId())) + { + notifier.notify("Random event spawned: " + currentRandomEvent.getName()); + } + } + } + } + + private void onGameTick(GameTick event) + { + if (!spawnedNpcs.isEmpty()) + { + // allow 2 ticks for interacting to get set + spawnedNpcs.entrySet().removeIf(entry -> client.getTickCount() - entry.getValue() >= 2); + } + + if (client.getTickCount() - lastEventTick > RANDOM_EVENT_TIMEOUT) + { + currentRandomEvent = null; + } + } + + private void onMenuEntryAdded(MenuEntryAdded event) + { + if (event.getOpcode() >= MenuOpcode.NPC_FIRST_OPTION.getId() + && event.getOpcode() <= MenuOpcode.NPC_FIFTH_OPTION.getId() + && EVENT_OPTIONS.contains(event.getOption())) + { + NPC npc = client.getCachedNPCs()[event.getIdentifier()]; + if (npc != null && EVENT_NPCS.contains(npc.getId()) && npc != currentRandomEvent && config.removeMenuOptions()) + { + client.setMenuEntries(Arrays.copyOf(client.getMenuEntries(), client.getMenuEntries().length - 1)); + } + } + } + + private boolean shouldNotify(int id) + { + if (this.notifyAllEvents) + { + return true; + } + + switch (id) + { + case NpcID.SERGEANT_DAMIEN_6743: + return this.notifyDemon; + case NpcID.FREAKY_FORESTER_6748: + return this.notifyForester; + case NpcID.FROG_5429: + return this.notifyFrog; + case NpcID.GENIE: + case NpcID.GENIE_327: + return this.notifyGenie; + case NpcID.EVIL_BOB: + case NpcID.EVIL_BOB_6754: + return this.notifyBob; + case NpcID.LEO_6746: + return this.notifyGravedigger; + case NpcID.MYSTERIOUS_OLD_MAN_6750: + case NpcID.MYSTERIOUS_OLD_MAN_6751: + case NpcID.MYSTERIOUS_OLD_MAN_6752: + case NpcID.MYSTERIOUS_OLD_MAN_6753: + return this.notifyMoM; + case NpcID.QUIZ_MASTER_6755: + return this.notifyQuiz; + case NpcID.DUNCE_6749: + return this.notifyDunce; + default: + return false; + } + } + + private void onConfigChanged(ConfigChanged event) + { + if (!"randomevents".equals(event.getGroup())) + { + return; + } + + updateConfig(); + } + + private void updateConfig() + { + this.notifyAllEvents = config.notifyAllEvents(); + this.notifyDemon = config.notifyDemon(); + this.notifyForester = config.notifyForester(); + this.notifyFrog = config.notifyFrog(); + this.notifyGenie = config.notifyGenie(); + this.notifyBob = config.notifyBob(); + this.notifyGravedigger = config.notifyGravedigger(); + this.notifyMoM = config.notifyMoM(); + this.notifyQuiz = config.notifyQuiz(); + this.notifyDunce = config.notifyDunce(); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java index c3255d7e67..dff42a493d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java @@ -633,7 +633,7 @@ public class SlayerPlugin extends Plugin forcedWait--; } - if (infoTimer != null) + if (infoTimer != null && config.statTimeout() != 0) { Duration timeSinceInfobox = Duration.between(infoTimer, Instant.now()); Duration statTimeout = Duration.ofMinutes(this.statTimeout); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerTaskPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerTaskPanel.java index f865237fe9..4d18038bf9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerTaskPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerTaskPanel.java @@ -22,7 +22,7 @@ import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.components.PluginErrorPanel; import net.runelite.client.util.ColorUtil; import net.runelite.client.util.ImageUtil; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @Singleton public class SlayerTaskPanel extends PluginPanel @@ -367,7 +367,7 @@ public class SlayerTaskPanel extends PluginPanel private static String htmlLabel(String key, int value) { - String valueStr = StackFormatter.quantityToRSDecimalStack(value); + String valueStr = QuantityFormatter.quantityToRSDecimalStack(value); return String.format(HTML_LABEL_TEMPLATE, ColorUtil.toHexColor(ColorScheme.LIGHT_GRAY_COLOR), key, valueStr); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TaskBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TaskBox.java index 75e7c8327a..80a595ef40 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TaskBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TaskBox.java @@ -19,7 +19,7 @@ import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.DynamicGridLayout; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.components.ProgressBar; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @Singleton class TaskBox extends JPanel @@ -301,7 +301,7 @@ class TaskBox extends JPanel private static String htmlLabel(int value) { - String valueStr = StackFormatter.quantityToRSDecimalStack(value); + String valueStr = QuantityFormatter.quantityToRSDecimalStack(value); return String.format(HTML_LABEL_TEMPLATE, valueStr); } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/ItemPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/ItemPanel.java index a2b41fc8ef..4dc15b42bf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/ItemPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/ItemPanel.java @@ -42,7 +42,7 @@ import net.runelite.client.plugins.loottracker.localstorage.LTItemEntry; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.components.shadowlabel.JShadowedLabel; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @Getter class ItemPanel extends JPanel @@ -84,7 +84,7 @@ class ItemPanel extends JPanel labelName.setForeground(getRSValueColor(this.record.getPrice())); labelName.setVerticalAlignment(SwingUtilities.BOTTOM); - final JShadowedLabel labelValue = new JShadowedLabel(StackFormatter.quantityToStackSize(total) + " gp"); + final JShadowedLabel labelValue = new JShadowedLabel(QuantityFormatter.quantityToStackSize(total) + " gp"); labelValue.setFont(FontManager.getRunescapeSmallFont()); labelValue.setForeground(getRSValueColor(total)); labelValue.setVerticalAlignment(SwingUtilities.TOP); @@ -113,9 +113,9 @@ class ItemPanel extends JPanel final int quantity = record.getQuantity(); final long price = record.getPrice(); - return "" + name + " x " + StackFormatter.formatNumber(quantity) - + "
Price: " + StackFormatter.quantityToStackSize(price) - + "
Total: " + StackFormatter.quantityToStackSize(quantity * price) + ""; + return "" + name + " x " + QuantityFormatter.formatNumber(quantity) + + "
Price: " + QuantityFormatter.quantityToStackSize(price) + + "
Total: " + QuantityFormatter.quantityToStackSize(quantity * price) + ""; } private static Color getRSValueColor(long val) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/LootGrid.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/LootGrid.java index f6c0984f37..e5af1d92a0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/LootGrid.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/LootGrid.java @@ -33,7 +33,7 @@ import javax.swing.border.EmptyBorder; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.loottracker.localstorage.LTItemEntry; import net.runelite.client.ui.ColorScheme; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; class LootGrid extends JPanel { @@ -81,8 +81,8 @@ class LootGrid extends JPanel final int quantity = item.getQuantity(); final long price = item.getPrice(); - return "" + name + " x " + StackFormatter.formatNumber(quantity) - + "
Price: " + StackFormatter.quantityToStackSize(price) - + "
Total: " + StackFormatter.quantityToStackSize(quantity * price) + ""; + return "" + name + " x " + QuantityFormatter.formatNumber(quantity) + + "
Price: " + QuantityFormatter.quantityToStackSize(price) + + "
Total: " + QuantityFormatter.quantityToStackSize(quantity * price) + ""; } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/TextPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/TextPanel.java index dfef6db86f..7fff1ca124 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/TextPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/TextPanel.java @@ -35,7 +35,7 @@ import javax.swing.SwingConstants; import javax.swing.border.Border; import lombok.Getter; import net.runelite.client.ui.ColorScheme; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @Getter class TextPanel extends JPanel @@ -58,7 +58,7 @@ class TextPanel extends JPanel totalText.setForeground(Color.WHITE); // Item Values (Colored off Total Value of item) - final JLabel total = new JLabel(StackFormatter.quantityToStackSize(totalValue) + " gp", SwingConstants.LEFT); + final JLabel total = new JLabel(QuantityFormatter.quantityToStackSize(totalValue) + " gp", SwingConstants.LEFT); total.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); total.setForeground(getRSValueColor(totalValue)); @@ -74,7 +74,7 @@ class TextPanel extends JPanel c.gridy = 0; c.ipady = 20; - panel.setToolTipText(StackFormatter.formatNumber(totalValue)); + panel.setToolTipText(QuantityFormatter.formatNumber(totalValue)); this.add(panel, c); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/UniqueItemPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/UniqueItemPanel.java index faeea3ab13..d0ddf89a8e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/UniqueItemPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/UniqueItemPanel.java @@ -43,7 +43,7 @@ import net.runelite.client.plugins.stonedtracker.data.UniqueItem; import net.runelite.client.ui.ColorScheme; import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.util.ImageUtil; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @Getter class UniqueItemPanel extends JPanel @@ -108,15 +108,15 @@ class UniqueItemPanel extends JPanel String s = "" + item.getName(); if (qty > 0) { - s += " x " + StackFormatter.formatNumber(qty); + s += " x " + QuantityFormatter.formatNumber(qty); } if (item.getPrice() > 0) { - s += "
Price: " + StackFormatter.quantityToStackSize(item.getPrice()); + s += "
Price: " + QuantityFormatter.quantityToStackSize(item.getPrice()); // Check for qty here as well as we should only show Total if the item has a value as well if (qty > 0) { - s += "
Total: " + StackFormatter.quantityToStackSize(qty * item.getPrice()) + " 0) @@ -341,7 +341,7 @@ class SuppliesBox extends JPanel ItemDefinition item = this.itemManager.getItemDefinition(itemId); final String name = item.getName(); final long price = item.getPrice(); - return name + " x " + qty + " (" + StackFormatter.quantityToStackSize(price * qty) + ") "; + return name + " x " + qty + " (" + QuantityFormatter.quantityToStackSize(price * qty) + ") "; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPanel.java index 088d2421b5..004c9b1ee6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPanel.java @@ -45,7 +45,7 @@ import net.runelite.client.ui.FontManager; import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.components.PluginErrorPanel; import net.runelite.client.util.ColorUtil; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; @Singleton class SuppliesTrackerPanel extends PluginPanel @@ -154,7 +154,7 @@ class SuppliesTrackerPanel extends PluginPanel */ private static String htmlLabel(String key, long value) { - final String valueStr = StackFormatter.quantityToStackSize(value); + final String valueStr = QuantityFormatter.quantityToStackSize(value); return String.format(HTML_LABEL_TEMPLATE, ColorUtil.toHexColor(ColorScheme.LIGHT_GRAY_COLOR), key, valueStr); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java index 963c9f0db0..9a455a5fe0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java @@ -115,6 +115,7 @@ public class TimersPlugin extends Plugin private static final int POISON_TICK_LENGTH = 30; private static final String SUPER_ANTIVENOM_DRINK_MESSAGE = "You drink some of your super antivenom potion"; private static final String KILLED_TELEBLOCK_OPPONENT_TEXT = "Your Tele Block has been removed because you killed "; + private static final String PRAYER_ENHANCE_EXPIRED = "Your prayer enhance effect has worn off."; private static final Pattern DEADMAN_HALF_TELEBLOCK_PATTERN = Pattern.compile("A Tele Block spell has been cast on you by (.+)\\. It will expire in 1 minute, 15 seconds\\."); private static final Pattern FULL_TELEBLOCK_PATTERN = Pattern.compile("A Tele Block spell has been cast on you by (.+)\\. It will expire in 5 minutes, 0 seconds\\."); private static final Pattern HALF_TELEBLOCK_PATTERN = Pattern.compile("A Tele Block spell has been cast on you by (.+)\\. It will expire in 2 minutes, 30 seconds\\."); @@ -628,6 +629,11 @@ public class TimersPlugin extends Plugin createGameTimer(PRAYER_ENHANCE); } + if (this.showPrayerEnhance && event.getMessage().equals(PRAYER_ENHANCE_EXPIRED)) + { + removeGameTimer(PRAYER_ENHANCE); + } + if (this.showCharge && event.getMessage().equals(CHARGE_MESSAGE)) { createGameTimer(CHARGE); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TabContentPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TabContentPanel.java index 434652fdb8..2885be7fe8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TabContentPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TabContentPanel.java @@ -30,7 +30,7 @@ import java.time.format.TextStyle; import java.time.temporal.ChronoUnit; import java.util.Locale; import javax.swing.JPanel; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; public abstract class TabContentPanel extends JPanel { @@ -82,7 +82,7 @@ public abstract class TabContentPanel extends JPanel sb.append(endTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.getDefault())).append(" "); } - sb.append("at ").append(StackFormatter.getPlatformTimeStringFromLocalDateTime(endTime)); + sb.append("at ").append(QuantityFormatter.getPlatformTimeStringFromLocalDateTime(endTime)); return sb.toString(); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java index 80dbfc45e5..698ae11a81 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java @@ -131,7 +131,8 @@ enum TeleportLocationData NEITIZNOT_LYRE(TeleportType.OTHER, "Enchanted Lyre", "Neitiznot", new WorldPoint(2336, 3801, 0), "enchanted_lyre_teleport_icon.png"), JATIZSO_LYRE(TeleportType.OTHER, "Enchanted Lyre", "Jatizso", new WorldPoint(2409, 3809, 0), "enchanted_lyre_teleport_icon.png"), WEISS_ICY_BASALT(TeleportType.OTHER, "Icy Basalt", "Weiss", new WorldPoint(2846, 3940, 0), "icy_basalt_teleport_icon.png"), - TROLL_STRONGHOLD_STONY_BASALT(TeleportType.OTHER, "Stony Basalt", "Troll Stronghold", new WorldPoint(2838, 3693, 0), "stony_basalt_teleport_icon.png"), + TROLL_STRONGHOLD_STONY_BASALT(TeleportType.OTHER, "Stony Basalt", "Troll Stronghold (with 73 Agility)", new WorldPoint(2838, 3693, 0), "stony_basalt_teleport_icon.png"), + TROLL_STRONGHOLD_STONY_BASALT_OUTSIDE(TeleportType.OTHER, "Stony Basalt", "Troll Stronghold", new WorldPoint(2844, 3693, 0), "stony_basalt_teleport_icon.png"), KHAREDSTS_MEMOIRS_HOSIDIUS(TeleportType.OTHER, "Kharedst's Memoirs", "Lunch by the Lancalliums (Hosidius)", new WorldPoint(1713, 3612, 0), "kharedsts_memoirs_teleport_icon.png"), KHAREDSTS_MEMOIRS_PISCARILIUS(TeleportType.OTHER, "Kharedst's Memoirs", "The Fisher's Flute (Piscarilius)", new WorldPoint(1802, 3748, 0), "kharedsts_memoirs_teleport_icon.png"), KHAREDSTS_MEMOIRS_SHAYZIEN(TeleportType.OTHER, "Kharedst's Memoirs", "History and Hearsay (Shayzien)", new WorldPoint(1476, 3580, 0), "kharedsts_memoirs_teleport_icon.png"), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java index 3bbe10826a..1d627eb1d0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java @@ -37,9 +37,10 @@ import javax.annotation.Nullable; enum TransportationPointLocation { //Ships - ARDOUGNE_TO_BRIMHAVEN("Ship to Brimhaven", new WorldPoint(2675, 3275, 0), new WorldPoint(2772, 3234, 0)), + ARDOUGNE_TO_BRIMHAVEN("Ship to Brimhaven / Rimmington", new WorldPoint(2675, 3275, 0)), ARDOUGNE_TO_FISHINGPLAT("Ship to Fishing Platform", new WorldPoint(2722, 3304, 0), new WorldPoint(2779, 3271, 0)), - BRIMHAVEN_TO_ARDOUGNE("Ship to Ardougne", new WorldPoint(2772, 3234, 0), new WorldPoint(2675, 3275, 0)), + BRIMHAVEN_TO_ARDOUGNE("Ship to Ardougne / Rimmington", new WorldPoint(2772, 3234, 0)), + RIMMINGTON_TO_ARDOUGNE("Ship to Ardougne / Brimhaven", new WorldPoint(2915, 3224, 0)), CATHERBY_TO_KEEP_LE_FAYE("Ship to Keep Le Faye", new WorldPoint(2804, 3421, 0), new WorldPoint(2769, 3402, 0)), CORSAIR_TO_RIMMINGTON("Ship to Rimmington", new WorldPoint(2577, 2839, 0), new WorldPoint(2909, 3227, 0 )), DRAGONTOOTH_TO_PHASMATYS("Ship to Port Phasmatys", new WorldPoint(3791, 3561, 0), new WorldPoint(3703, 3487, 0)), @@ -50,7 +51,7 @@ enum TransportationPointLocation ICEBERG_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2657, 3988, 0), new WorldPoint(2707, 3735, 0)), ISLAND_TO_APE_ATOLL("Ship to Ape Atoll", new WorldPoint(2891, 2726, 0), new WorldPoint(2802, 2706, 0)), JATIZSO_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2420, 3780, 0), new WorldPoint(2639, 3710, 0)), - KARAMJA_TO_PORT_SARIM("Ship to Port Sarim", new WorldPoint(2955, 3144, 0), new WorldPoint(3029, 3218, 0)), + KARAMJA_TO_PORT_SARIM("Ship to Port Sarim", new WorldPoint(2955, 3145, 0), new WorldPoint(3029, 3218, 0)), KARAMJA_TO_PORT_KHAZARD("Ship to Port Khazard", new WorldPoint(2763, 2957, 0), new WorldPoint(2653, 3166, 0)), LANDSEND_TO_PORTSARIM_PORTPISCARILIUS("Ship to Port Sarim/Port Piscarilius", new WorldPoint(1503, 3398, 0)), LUNAR_ISLE_TO_PIRATES_COVE("Ship to Pirates' Cove", new WorldPoint(2137, 3899, 0), new WorldPoint(2223, 3796, 0)), @@ -108,7 +109,7 @@ enum TransportationPointLocation CHARTER_BRIMHAVEN("Charter Ship", new WorldPoint(2760, 3238, 0)), CHARTER_CATHERBY("Charter Ship", new WorldPoint(2791, 3415, 0)), CHARTER_CORSAIR_("Charter Ship", new WorldPoint(2589, 2851, 0)), - CHARTER_KARAMJA_NORTH("Charter Ship", new WorldPoint(2954, 3159, 0)), + CHARTER_KARAMJA_NORTH("Charter Ship", new WorldPoint(2954, 3158, 0)), CHARTER_KARAMJA_EAST("Charter Ship", new WorldPoint(2999, 3032, 0)), CHARTER_KHAZARD("Charter Ship", new WorldPoint(2673, 3143, 0)), CHARTER_MOSLE_HARMLESS("Charter Ship", new WorldPoint(3669, 2931, 0)), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java index e2e5ba15a8..1514bf9ff9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java @@ -59,7 +59,7 @@ import net.runelite.client.ui.SkillColor; import net.runelite.client.ui.components.ProgressBar; import net.runelite.client.util.ColorUtil; import net.runelite.client.util.LinkBrowser; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; class XpInfoBox extends JPanel { @@ -364,7 +364,7 @@ class XpInfoBox extends JPanel static String htmlLabel(String key, int value) { - String valueStr = StackFormatter.quantityToRSDecimalStack(value, true); + String valueStr = QuantityFormatter.quantityToRSDecimalStack(value, true); return String.format(HTML_LABEL_TEMPLATE, ColorUtil.toHexColor(ColorScheme.LIGHT_GRAY_COLOR), key, valueStr); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java index 5e3515af8d..887709f54f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java @@ -46,7 +46,7 @@ import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.ProgressBarComponent; import net.runelite.client.ui.overlay.components.SplitComponent; -import net.runelite.client.util.StackFormatter; +import net.runelite.client.util.QuantityFormatter; class XpInfoBoxOverlay extends Overlay { @@ -119,7 +119,7 @@ class XpInfoBoxOverlay extends Overlay final LineComponent xpLine = LineComponent.builder() .left(leftStr + ":") - .right(StackFormatter.quantityToRSDecimalStack(rightNum, true)) + .right(QuantityFormatter.quantityToRSDecimalStack(rightNum, true)) .build(); final String bottemLeftStr; @@ -140,7 +140,7 @@ class XpInfoBoxOverlay extends Overlay final LineComponent xpLineBottom = LineComponent.builder() .left(bottemLeftStr + ":") - .right(StackFormatter.quantityToRSDecimalStack(bottomRightNum, true)) + .right(QuantityFormatter.quantityToRSDecimalStack(bottomRightNum, true)) .build(); final SplitComponent xpSplit = SplitComponent.builder() diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java index 269e113b6a..0f996c94fa 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java @@ -51,7 +51,6 @@ public class WidgetOverlay extends Overlay .put(WidgetInfo.PEST_CONTROL_INFO, OverlayPosition.TOP_LEFT) .put(WidgetInfo.ZEAH_MESS_HALL_COOKING_DISPLAY, OverlayPosition.TOP_LEFT) .put(WidgetInfo.PVP_BOUNTY_HUNTER_INFO, OverlayPosition.TOP_RIGHT) - .put(WidgetInfo.PVP_KILLDEATH_COUNTER, OverlayPosition.TOP_LEFT) .put(WidgetInfo.SKOTIZO_CONTAINER, OverlayPosition.TOP_LEFT) .put(WidgetInfo.KOUREND_FAVOUR_OVERLAY, OverlayPosition.TOP_CENTER) .put(WidgetInfo.MULTICOMBAT_FIXED, OverlayPosition.BOTTOM_RIGHT) diff --git a/runelite-client/src/main/java/net/runelite/client/util/PvPUtil.java b/runelite-client/src/main/java/net/runelite/client/util/PvPUtil.java index 53672490ac..7dbe269289 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/PvPUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/PvPUtil.java @@ -21,7 +21,6 @@ import net.runelite.api.Varbits; import net.runelite.api.WorldType; import net.runelite.api.coords.WorldPoint; import net.runelite.client.game.ItemManager; -import static net.runelite.client.util.StackFormatter.quantityToRSDecimalStack; import org.apache.commons.lang3.ArrayUtils; /** @@ -106,7 +105,7 @@ public class PvPUtil } wealth += value; } - return Integer.parseInt(quantityToRSDecimalStack(priceMap.keySet().stream().mapToInt(Integer::intValue).sum())); + return Integer.parseInt(QuantityFormatter.quantityToRSDecimalStack(priceMap.keySet().stream().mapToInt(Integer::intValue).sum())); } } diff --git a/runelite-client/src/main/java/net/runelite/client/util/StackFormatter.java b/runelite-client/src/main/java/net/runelite/client/util/QuantityFormatter.java similarity index 68% rename from runelite-client/src/main/java/net/runelite/client/util/StackFormatter.java rename to runelite-client/src/main/java/net/runelite/client/util/QuantityFormatter.java index 006e024223..beca46c629 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/StackFormatter.java +++ b/runelite-client/src/main/java/net/runelite/client/util/QuantityFormatter.java @@ -37,10 +37,9 @@ import java.util.regex.Pattern; import net.runelite.client.RuneLite; /** - * A set of utility functions to use when - * formatting numbers for to stack sizes. + * A set of utility functions to use when formatting quantities */ -public class StackFormatter +public class QuantityFormatter { /** * A list of suffixes to use when formatting stack sizes. @@ -52,44 +51,18 @@ public class StackFormatter */ private static final Pattern SUFFIX_PATTERN = Pattern.compile("^-?[0-9,.]+([a-zA-Z]?)$"); - /** - * A number formatter - */ private static final NumberFormat NUMBER_FORMATTER = NumberFormat.getInstance(Locale.ENGLISH); - /** - * A decimal number formatter - */ private static final NumberFormat DECIMAL_FORMATTER = new DecimalFormat( "#,###.#", DecimalFormatSymbols.getInstance(Locale.ENGLISH) ); - /** - * A more precise decimal number formatter, outputting thousandths - */ private static final NumberFormat PRECISE_DECIMAL_FORMATTER = new DecimalFormat( "#,###.###", DecimalFormatSymbols.getInstance(Locale.ENGLISH) ); - /** - * Attempts to call the platform to get a localized time string based on - * the users preferences. Falls back on using locale default if it is on a - * platform that has no consistent way of obtaining this information. - * - * @param localDateTime The LocalDateTime object to format as a string - * @return The formatted string. - */ - public static String getPlatformTimeStringFromLocalDateTime(LocalDateTime localDateTime) - { - if (OSType.getOSType() == OSType.Windows) - { - return WinApi.getTimeFormatString(localDateTime); - } - return StackFormatter.getLocalizedDateTimeFormatter(FormatStyle.SHORT).format(localDateTime.toLocalTime()); - } - /** * Get a localized DateTimeFormatter for use. * @@ -101,15 +74,17 @@ public class StackFormatter return DateTimeFormatter.ofLocalizedTime(formatStyle).withLocale(RuneLite.SYSTEM_LOCALE); } + /** - * Convert a quantity to a nicely formatted stack size. - * See the StackFormatterTest to see expected output. + * Convert a quantity to a short, comma separated, SI-prefix style string + * + * example: {@code 9,450}, {@code 2.14B}, {@code 100K} + * * @param quantity The quantity to convert. - * @return A condensed version, with commas, K, M or B - * as needed to 3 significant figures. + * @return a 6 or less character string, possibly with a decimal point, commas or K/M/B suffix */ - public static String quantityToStackSize(long quantity) + public static synchronized String quantityToStackSize(long quantity) { if (quantity < 0) { @@ -147,49 +122,12 @@ public class StackFormatter } /** - * Convert a quantity to stack size as it would - * appear in RuneScape. - * - * @param quantity The quantity to convert. - * @return The stack size as it would appear in RS, - * with K after 100,000 and M after 10,000,000 - */ - public static String quantityToRSStackSize(int quantity) - { - if (quantity == Integer.MIN_VALUE) - { - // Integer.MIN_VALUE = Integer.MIN_VALUE * -1 so we need to correct for it. - return "-" + quantityToRSStackSize(Integer.MAX_VALUE); - } - else if (quantity < 0) - { - return "-" + quantityToRSStackSize(-quantity); - } - else if (quantity < 100_000) - { - return Integer.toString(quantity); - } - else if (quantity < 10_000_000) - { - return quantity / 1_000 + "K"; - } - else - { - return quantity / 1_000_000 + "M"; - } - } - - /** - * Convert a quantity to stack size as it would - * appear in RuneScape. (with decimals) - *

- * This differs from quantityToRSStack in that it displays - * decimals. Ex: 27100 is 27.1k (not 27k) - *

- * - * @param quantity The quantity to convert. - * @return The stack size as it would appear in RS, with decimals, + * Convert a quantity to a short SI-prefix style string, possibly with a decimal, * with K after 100,000 and M after 10,000,000 + * + * example: {@code 9,450}, {@code 2.1B}, {@code 100K} + * + * @see #quantityToRSDecimalStack(int, boolean) */ public static String quantityToRSDecimalStack(int quantity) { @@ -197,19 +135,16 @@ public class StackFormatter } /** - * Convert a quantity to stack size as it would - * appear in RuneScape. (with decimals) - *

- * This differs from quantityToRSStack in that it displays - * decimals. Ex: 27100 is 27.1k (not 27k) - *

- * - * @param quantity The quantity to convert. - * @param precise If true, the returned string will have thousandths precision if quantity is larger than 1 million. - * @return The stack size as it would appear in RS, with decimals, + * Convert a quantity to a short SI-prefix style string, possibly with decimals, * with K after 100,000 and M after 10,000,000 + * + * example without {@code precise}: {@code 9,450}, {@code 2.1B}, {@code 8.4M} + * example with {@code precise}: {@code 9,450}, {@code 2.147B}, {@code 8.32M} + * + * @param precise If true, allow thousandths precision if {@code quantity} is larger than 1 million. + * Otherwise have at most a single decimal */ - public static String quantityToRSDecimalStack(int quantity, boolean precise) + public static synchronized String quantityToRSDecimalStack(int quantity, boolean precise) { String quantityStr = String.valueOf(quantity); if (quantityStr.length() <= 4) @@ -234,7 +169,7 @@ public class StackFormatter * @param string The string to convert. * @return A long representation of it. */ - public static long stackSizeToQuantity(String string) throws ParseException + public static synchronized long parseQuantity(String string) throws ParseException { int multiplier = getMultiplier(string); float parsedValue = NUMBER_FORMATTER.parse(string).floatValue(); @@ -242,29 +177,23 @@ public class StackFormatter } /** - * Specialization of format. + * Formats a number to be comma delimited. No suffixes are given * - * @param number the long number to format - * @return the formatted String - * @throws ArithmeticException if rounding is needed with rounding - * mode being set to RoundingMode.UNNECESSARY - * @see java.text.Format#format + * example: {@code 10,123,351}, {@code 5} */ - public static String formatNumber(final long number) + public static synchronized String formatNumber(final long number) { return NUMBER_FORMATTER.format(number); } + /** - * Specialization of format. + * Formats a number to be comma delimited. No suffixes are given. Has at + * most 3 decimal places * - * @param number the double number to format - * @return the formatted String - * @throws ArithmeticException if rounding is needed with rounding - * mode being set to RoundingMode.UNNECESSARY - * @see java.text.Format#format + * example: {@code 10,123,351}, {@code 5.612} */ - public static String formatNumber(double number) + public static synchronized String formatNumber(double number) { return NUMBER_FORMATTER.format(number); } @@ -307,4 +236,21 @@ public class StackFormatter return 1; } } + + /** + * Attempts to call the platform to get a localized time string based on + * the users preferences. Falls back on using locale default if it is on a + * platform that has no consistent way of obtaining this information. + * + * @param localDateTime The LocalDateTime object to format as a string + * @return The formatted string. + */ + public static String getPlatformTimeStringFromLocalDateTime(LocalDateTime localDateTime) + { + if (OSType.getOSType() == OSType.Windows) + { + return WinApi.getTimeFormatString(localDateTime); + } + return QuantityFormatter.getLocalizedDateTimeFormatter(FormatStyle.SHORT).format(localDateTime.toLocalTime()); + } } diff --git a/runelite-client/src/main/resources/item_variations.json b/runelite-client/src/main/resources/item_variations.json index 458a600b1f..91cd7e19aa 100644 --- a/runelite-client/src/main/resources/item_variations.json +++ b/runelite-client/src/main/resources/item_variations.json @@ -1 +1,9609 @@ -{"toolkit":[1,4051],"excalibur":[35,8280],"longbow":[48,839],"shortbow":[50,841],"oakshortbow":[54,843],"oaklongbow":[56,845],"willowlongbow":[58,847],"willowshortbow":[60,849],"maplelongbow":[62,851],"mapleshortbow":[64,853,20403],"yewlongbow":[66,855],"yewshortbow":[68,857,20401],"magiclongbow":[70,859],"magicshortbow":[72,861,12788,20558],"lever":[83,10991,10992],"bootsoflightness":[88,89],"strengthpotion":[113,115,117,119],"attackpotion":[121,123,125,2428],"restorepotion":[127,129,131,2430],"defencepotion":[133,135,137,2432],"prayerpotion":[139,141,143,2434,20393,20394,20395,20396],"superattack":[145,147,149,2436],"fishingpotion":[151,153,155,2438],"superstrength":[157,159,161,2440],"superdefence":[163,165,167,2442],"rangingpotion":[169,171,173,2444,23551,23553,23555,23557],"antipoison":[175,177,179,2446],"superantipoison":[181,183,185,2448],"weaponpoison":[187,1465,5936,5937,5939,5940],"zamorakbrew":[189,191,193,2450],"potion":[195,2394,22409],"vialofwater":[227,9086],"vial":[229,2389,2390],"unicornhorn":[237,1487],"wineofzamorak":[245,23489],"key":[275,423,1543,1544,1545,1546,1547,1548,2411,2832,2834,2836,2838,2840,3606,3608,5010,6104,7297,7299,7302,9722,11039,11040,11041,11042,11043,19761,19812],"sheepbones":[280,281,282,283],"notes":[291,20770,20771,20772,21056,21057,21058],"akey":[293,298],"glarialsurn":[296,297],"smallfishingnet":[303,6209],"rawshrimps":[317,2514],"burntfish":[323,343,357,367,369,20854],"shark":[385,6969,20390],"casket":[405,2714,2715,2717,2718,2720,2721,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746,2748,2775,2777,2779,2781,2784,2787,2789,2791,2802,2804,2806,2808,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,3511,3517,3519,3521,3523,3527,3529,3531,3533,3535,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3581,3583,3585,3587,3589,3591,3593,3595,3597,3600,3603,7237,7240,7242,7244,7246,7257,7259,7261,7263,7265,7267,7287,7289,7291,7293,7295,7306,7308,7310,7312,7314,7316,7318,7956,10181,10183,10185,10187,10189,10191,10193,10195,10197,10199,10201,10203,10205,10207,10209,10211,10213,10215,10217,10219,10221,10223,10225,10227,10229,10231,10233,10235,10237,10239,10241,10243,10245,10247,10249,10251,10253,10255,10257,10259,10261,10263,10265,10267,10269,10271,10273,10275,10277,10279,12022,12024,12026,12028,12030,12032,12034,12036,12038,12040,12042,12044,12046,12048,12050,12052,12054,12084,12112,12129,12131,12160,12163,12165,12171,12180,12543,12545,12547,12549,12551,12553,12555,12557,12559,12561,12563,12565,12580,12583,12586,12589,12591,19775,19777,19779,19781,19815,19827,19832,19834,19841,19843,19845,19849,19851,19861,19863,19865,19867,19869,19871,19873,19875,19877,19879,19881],"pigeoncage":[424,425],"priestgown":[426,428],"karamjanrum":[431,3164,3165],"chestkey":[432,709,2404,4273],"scorpioncage":[456,457,458,459,460,461,462,463],"brokenpickaxe":[468,470,472,474,476,478,11923,12594],"axehandle":[492,7952],"brokenaxe":[494,496,498,500,502,504,506,6741],"bones":[526,2530,3187],"monksrobe":[542,20202,23306],"monksrobetop":[544,20199,23303],"shaderobe":[548,10634],"ghostspeakamulet":[552,4250],"firerune":[554,6428,7554,9699,11686,11718],"waterrune":[555,6424,7556,9691,11687,11716],"airrune":[556,6422,7558,9693,11688,11715],"earthrune":[557,6426,9695,11689,11717],"mindrune":[558,6436,9697,11690],"bodyrune":[559,6438,11691],"deathrune":[560,6432,11692,11713],"naturerune":[561,11693],"chaosrune":[562,6430,7560,11694,11712],"lawrune":[563,6434,11695],"cosmicrune":[564,11696],"bloodrune":[565,11697,11714],"soulrune":[566,11698],"bluewizardrobe":[577,7390,7392],"bluewizardhat":[579,7394,7396],"bailingbucket":[583,585],"tinderbox":[590,7156],"torch":[595,8987,9665],"bronzefirearrows":[598,942],"bonekey":[605,4272],"locatingcrystal":[611,612,613,614,615],"coins":[617,995,6964,8890],"paramayaticket":[619,620],"bluehat":[660,740],"panningtray":[677,678,679],"brokenglass":[690,1469],"levelcertificate":[691,692,693],"stonetablet":[699,22991],"mixedchemicals":[705,706],"vase":[710,3734],"cupoftea":[712,1978,4242,4243,4245,4246,4838,7730,7731,7733,7734,7736,7737],"cluescroll":[713,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2716,2719,2722,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2773,2774,2776,2778,2780,2782,2783,2785,2786,2788,2790,2792,2793,2794,2796,2797,2799,2801,2803,2805,2807,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845,2847,2848,2849,2851,2853,2855,2856,2857,2858,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3512,3513,3514,3515,3516,3518,3520,3522,3524,3525,3526,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572,3573,3574,3575,3577,3579,3580,3582,3584,3586,3588,3590,3592,3594,3596,3598,3599,3601,3602,3604,3605,3607,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,7236,7238,7239,7241,7243,7245,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7258,7260,7262,7264,7266,7268,7270,7272,7274,7276,7278,7280,7282,7284,7286,7288,7290,7292,7294,7296,7298,7300,7301,7303,7304,7305,7307,7309,7311,7313,7315,7317,10180,10182,10184,10186,10188,10190,10192,10194,10196,10198,10200,10202,10204,10206,10208,10210,10212,10214,10216,10218,10220,10222,10224,10226,10228,10230,10232,10234,10236,10238,10240,10242,10244,10246,10248,10250,10252,10254,10256,10258,10260,10262,10264,10266,10268,10270,10272,10274,10276,10278,12021,12023,12025,12027,12029,12031,12033,12035,12037,12039,12041,12043,12045,12047,12049,12051,12053,12055,12057,12059,12061,12063,12065,12067,12069,12071,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,12095,12096,12097,12098,12099,12100,12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12113,12114,12115,12116,12117,12118,12119,12120,12121,12122,12123,12124,12125,12126,12127,12130,12132,12133,12134,12135,12136,12137,12138,12140,12141,12142,12143,12144,12145,12146,12147,12148,12149,12150,12151,12152,12153,12154,12155,12156,12157,12158,12159,12162,12164,12166,12167,12168,12169,12170,12172,12173,12174,12175,12176,12177,12178,12179,12181,12182,12183,12184,12185,12186,12187,12188,12189,12190,12191,12192,12542,12544,12546,12548,12550,12552,12554,12556,12558,12560,12562,12564,12566,12568,12570,12572,12574,12576,12578,12581,12584,12587,12590,19734,19736,19738,19740,19742,19744,19746,19748,19750,19752,19754,19756,19758,19760,19762,19764,19766,19768,19770,19772,19774,19776,19778,19780,19782,19783,19784,19785,19786,19787,19788,19789,19790,19791,19792,19793,19794,19795,19796,19797,19798,19799,19800,19801,19802,19803,19804,19805,19806,19807,19808,19809,19810,19811,19813,19814,19816,19817,19818,19819,19820,19821,19822,19823,19824,19825,19826,19828,19829,19830,19831,19833,19835,19840,19842,19844,19846,19848,19850,19852,19853,19854,19856,19857,19858,19860,19862,19864,19866,19868,19870,19872,19874,19876,19878,19880,19882,19884,19886,19888,19890,19892,19894,19896,19898,19900,19902,19904,19906,19908,19910,21524,21525,21526,21527,22000,22001,23045,23046,23131,23133,23135,23136,23137,23138,23139,23140,23141,23142,23143,23144,23145,23146,23147,23148,23149,23150,23151,23152,23153,23154,23155,23156,23157,23158,23159,23160,23161,23162,23163,23164,23165,23166,23167,23168,23169,23170,23172,23174,23175,23176,23177,23178,23179,23180,23181,23182,23770,23814,23815,23816,23817,24253],"radimusnotes":[714,715],"scrawlednote":[717,19511],"goldenbowl":[723,724,725,726],"hollowreed":[727,728],"yommitreeseeds":[735,736],"heartcrystal":[744,745],"message":[755,9633,9649,22475],"book":[757,1509,6767],"faladorshield":[762,13117,13118,13119,13120],"brokenshield":[763,765],"coalbag":[764,12019],"gembag":[766,12020],"phoenixcrossbow":[767,11165,11167],"certificate":[769,3114],"ardougnecloak":[770,13121,13122,13123,13124],"crestpart":[779,780,781],"twigs":[789,790,791,792],"bronzedart":[806,812,5628,5635],"irondart":[807,813,5629,5636],"steeldart":[808,814,5630,5637],"mithrildart":[809,815,5632,5639],"adamantdart":[810,816,5633,5640],"runedart":[811,817,5634,5641],"bronzejavelin":[825,831,5642,5648],"ironjavelin":[826,832,5643,5649],"steeljavelin":[827,833,5644,5650],"mithriljavelin":[828,834,5645,5651],"adamantjavelin":[829,835,5646,5652],"runejavelin":[830,836,5647,5653],"ironknife":[863,871,5655,5662],"bronzeknife":[864,870,5654,5661],"steelknife":[865,872,5656,5663],"mithrilknife":[866,873,5657,5664],"adamantknife":[867,875,5659,5666],"runeknife":[868,876,5660,5667],"blackknife":[869,874,5658,5665],"bronzebolts":[877,878,6061,6062,9375],"opalbolts":[879,9236],"pearlbolts":[880,9238],"bronzearrow":[882,883,5616,5622,11700],"ironarrow":[884,885,5617,5623,11701],"steelarrow":[886,887,5618,5624,11702],"mithrilarrow":[888,889,5619,5625,7552,11703],"adamantarrow":[890,891,5620,5626,20388],"runearrow":[892,893,5621,5627,20600],"knife":[946,5605],"rope":[954,4498,7155,11046,20587],"skull":[964,965],"tile":[966,5568],"rock":[968,1480,1855,4043,4487,7533,9716,21250],"papyrus":[970,972],"whiteapron":[1005,7957],"blueskirt":[1011,7386,7388],"blackskirt":[1015,12445,12447],"bunnyears":[1037,10734],"bluepartyhat":[1042,2422],"capeoflegends":[1052,8284,10635],"leatherboots":[1061,6893],"ironplatelegs":[1067,12227,12237],"steelplatelegs":[1069,20172,20187],"mithrilplatelegs":[1071,12279,12289],"adamantplatelegs":[1073,2601,2609,20416],"bronzeplatelegs":[1075,12207,12217],"blackplatelegs":[1077,2585,2593],"runeplatelegs":[1079,2617,2625,20422],"ironplateskirt":[1081,12229,12239],"steelplateskirt":[1083,20175,20190],"mithrilplateskirt":[1085,12285,12295],"bronzeplateskirt":[1087,12209,12219],"blackplateskirt":[1089,3472,3473],"adamantplateskirt":[1091,3474,3475],"runeplateskirt":[1093,3476,3477],"leatherchaps":[1095,23384],"studdedchaps":[1097,7366,7368],"greendhidechaps":[1099,7378,7380],"ironplatebody":[1115,12225,12235],"bronzeplatebody":[1117,12205,12215],"steelplatebody":[1119,20169,20184],"mithrilplatebody":[1121,12277,12287],"adamantplatebody":[1123,2599,2607,10697,10698,20415,23392,23395,23398,23401,23404],"blackplatebody":[1125,2583,2591,10690,10691,23366,23369,23372,23375,23378],"runeplatebody":[1127,2615,2623,10798,10800,20421,23209,23212,23215,23218,23221],"leatherbody":[1129,23381],"studdedbody":[1133,7362,7364,10680,10681],"greendhidebody":[1135,7370,7372],"adamantmedhelm":[1145,6895],"dragonmedhelm":[1149,6967],"ironhelm":[1153,12231,12241],"bronzehelm":[1155,12211,12221],"steelhelm":[1157,20178,20193],"mithrilhelm":[1159,12283,12293],"adamanthelm":[1161,2605,2613,10296,10298,10300,10302,10304,10709,10710,10711,10712,10713,20561],"runehelm":[1163,2619,2627,10286,10288,10290,10292,10294,10704,10705,10706,10707,10708],"blackhelm":[1165,2587,2595,10306,10308,10310,10312,10314,10699,10700,10701,10702,10703],"woodenshield":[1171,7676,20166],"dragonsqshield":[1187,12418],"bronzekiteshield":[1189,12213,12223],"ironkiteshield":[1191,12233,12243],"steelkiteshield":[1193,8746,8748,8750,8752,8754,8756,8758,8760,8762,8764,8766,8768,8770,8772,8774,8776,20181,20196],"blackkiteshield":[1195,2589,2597],"mithrilkiteshield":[1197,12281,12291],"adamantkiteshield":[1199,2603,2611,6894,22127,22129,22131,22133,22135,22137,22139,22141,22143,22145,22147,22149,22151,22153,22155,22157],"runekiteshield":[1201,2621,2629,8714,8716,8718,8720,8722,8724,8726,8728,8730,8732,8734,8736,8738,8740,8742,8744],"irondagger":[1203,1219,5668,5686],"bronzedagger":[1205,1221,5670,5688],"steeldagger":[1207,1223,5672,5690],"mithrildagger":[1209,1225,5674,5692],"adamantdagger":[1211,1227,5676,5694],"runedagger":[1213,1229,5678,5696],"dragondagger":[1215,1231,5680,5698,20407],"blackdagger":[1217,1233,5682,5700],"bronzespear":[1237,1251,3170,5704,5718],"ironspear":[1239,1253,3171,5706,5720],"steelspear":[1241,1255,3172,5708,5722],"mithrilspear":[1243,1257,3173,5710,5724],"adamantspear":[1245,1259,3174,5712,5726],"runespear":[1247,1261,3175,5714,5728],"dragonspear":[1249,1263,3176,5716,5730],"ironpickaxe":[1267,11721],"mithrilpickaxe":[1273,11720],"runepickaxe":[1275,11719],"runelongsword":[1303,6897],"runehsword":[1319,20555],"runescimitar":[1333,20402,23330,23332,23334],"runebattleaxe":[1373,20552],"ibansstaff":[1409,1410,12658],"scythe":[1419,10735],"amuletofaccuracy":[1478,20584],"orboflight":[1481,1482,1483,1484],"paladinsbadge":[1488,1489,1490],"amagicscroll":[1505,6949],"logs":[1511,2511],"mappart":[1535,1536,1537],"antidragonshield":[1540,8282,11710],"petkitten":[1555,1556,1557,1558,1559,1560],"petcat":[1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572],"emerald":[1605,6896],"dragonstone":[1615,6903],"goldamulet":[1673,1692],"sapphireamulet":[1675,1694],"emeraldamulet":[1677,1696],"rubyamulet":[1679,1698],"diamondamulet":[1681,1700],"dragonstoneamulet":[1683,1702],"karamjagloves":[1686,11136,11138,11140,13103],"amuletofglory":[1704,1706,1708,1710,1712,8283,10354,10356,10358,10360,10362,10719,11964,11966,11976,11978,20586],"holysymbol":[1718,4682],"unholysymbol":[1724,4683],"amuletofmagic":[1727,10366,10738],"amuletofdefence":[1729,23309],"amuletofpower":[1731,20585,23354],"shears":[1735,5603],"chisel":[1755,5601],"moltenglass":[1775,24260],"woadleaf":[1793,5738],"bronzewire":[1794,5602],"silvernecklace":[1796,1797],"silvercup":[1798,1799],"silverbottle":[1800,1801],"silverbook":[1802,1803],"silverneedle":[1804,1805],"silverpot":[1806,1807,4658,4660,4662,4664,4666],"criminalsthread":[1808,1809,1810],"criminalsdagger":[1813,1814],"waterskin":[1823,1825,1827,1829,1831],"barrel":[1841,3216],"ugthankikebab":[1883,1885],"cake":[1891,1893],"chocolatecake":[1897,1899],"asgarnianale":[1905,5739,5779,5781,5783,5785,5859,5861,5863,5865,7744,8241,8520],"greenmansale":[1909,5743,5787,5789,5791,5793,5867,5869,5871,5873,7746,8242,8522],"dragonbitter":[1911,5745,5803,5805,5807,5809,5883,5885,5887,5889,7748,8243,8524],"dwarvenstout":[1913,5747,5771,5773,5775,5777,5851,5853,5855,5857],"beer":[1917,7740],"beerglass":[1919,6123,7742],"bucket":[1925,8986,9660],"bucketofwater":[1929,6712,9659],"potofflour":[1933,2516],"swamppaste":[1941,22095],"grain":[1947,5607],"easteregg":[1961,7928,7929,7930,7931,7932,7933,11027,11028,11029,11030],"cabbage":[1965,1967,22519,22520],"emptycup":[1980,7728],"jugofbadwine":[1991,1992],"unfermentedwine":[1995,1996],"incompletestew":[1997,1999],"unfinishedcocktail":[2042,2044,2046,2050,2052,2056,2058,2060,2062,2066,2068,2070,2072,2076,2078,2082,2086,2088,2090],"pineapplepunch":[2048,9512],"wizardblizzard":[2054,9487,9489,9508],"blurberryspecial":[2064,9520],"chocsaturday":[2074,9518],"shortgreenguy":[2080,9510],"fruitblast":[2084,9514],"drunkdragon":[2092,9516],"oddcocktail":[2094,2096,2098,2100],"rawbeef":[2132,4287],"rawchicken":[2138,4289],"cookedchicken":[2140,4291],"cookedmeat":[2142,4293],"battatin":[2164,9522,9524],"unfinishedbowl":[2179,2181,2183,2189,2193,9560,9562,9564],"chocolatebomb":[2185,9553],"tangledtoadslegs":[2187,9551],"wormhole":[2191,9547],"vegball":[2195,9549],"wormcrunchies":[2205,9542],"unfinishedcrunchy":[2207,2211,2215,9578,9580,9582,9584],"chocchipcrunchies":[2209,9544],"spicycrunchies":[2213,9540],"toadcrunchies":[2217,9538],"unfinishedbatta":[2251,2257,2261,2263,2265,2267,2269,2271,2273,2275,2279,9479,9481,9484,9486],"wormbatta":[2253,9531],"toadbatta":[2255,9529],"cheesetombatta":[2259,9535],"fruitbatta":[2277,9527],"vegetablebatta":[2281,9533],"plainpizza":[2289,2291],"meatpizza":[2293,2295],"anchovypizza":[2297,2299],"pineapplepizza":[2301,2303],"redberrypie":[2325,2333],"meatpie":[2327,2331],"palmleaf":[2339,2340],"relicpart":[2373,2374,2375],"crystal":[2380,2381,2382,2383],"silverlightkey":[2399,2400,2401],"silverlight":[2402,6745,8279],"diary":[2408,3395,3846],"doorkey":[2409,9654],"magnet":[2410,3718,5604],"guthixcape":[2413,10720],"bronzekey":[2418,5585,8867,19566],"wig":[2419,2421],"vorkathshead":[2425,21907,21912],"antifirepotion":[2452,2454,2456,2458],"redflowers":[2462,8938],"blueflowers":[2464,8936],"bluedhidechaps":[2493,7382,7384,20418],"reddhidechaps":[2495,12329,12333,20567],"blackdhidechaps":[2497,12383,12387,20424],"bluedhidebody":[2499,7374,7376,20417],"reddhidebody":[2501,12327,12331,20566],"blackdhidebody":[2503,12381,12385,20423],"dragonchainbody":[2513,3140,12414,20428],"lamp":[2528,6796],"deadorb":[2529,17152],"ironfirearrows":[2532,2533],"steelfirearrows":[2534,2535],"mithrilfirearrows":[2536,2537],"adamantfirearrows":[2538,2539],"runefirearrows":[2540,2541],"ringofdueling":[2552,2554,2556,2558,2560,2562,2564,2566],"ringofwealth":[2572,11980,11982,11984,11986,11988,12785,20786,20787,20788,20789,20790],"rangerboots":[2577,10696],"wizardboots":[2579,10689],"robinhoodhat":[2581,10796],"highwaymanmask":[2631,10692],"blueberet":[2633,10693],"blackberet":[2635,10694],"whiteberet":[2637,10695],"tancavalier":[2639,10802],"darkcavalier":[2641,10804],"blackcavalier":[2643,10806],"redheadband":[2645,10768],"blackheadband":[2647,10770],"brownheadband":[2649,10772],"pirateshat":[2651,10774],"zamorakplatebody":[2653,10776],"guthixplatebody":[2669,10780],"puzzlebox":[2795,2798,2800,3565,3567,3569,3571,3576,3578,12161,12579,12582,12585,12588,19887,19891,19895,19897,19903,19911,20280,20281,20282,23171,23173,23417],"challengescroll":[2842,2844,2846,2850,2852,2854,7269,7271,7273,7275,7277,7279,7281,7283,7285,12056,12058,12060,12062,12064,12066,12068,12070,12072,12128,12139,12567,12569,12571,12573,12575,12577,19735,19737,19739,19741,19743,19745,19747,19749,19751,19753,19755,19757,19759,19763,19765,19767,19769,19771,19773,19847,19855,19859,19883,19885,19889,19893,19899,19901,19905,19907,19909,23132,23134],"ogrebellows":[2871,2872,2873,2874],"cookedchompy":[2878,7228],"astonebowl":[2888,2889],"ironkey":[2945,8869],"goldenfeather":[2950,10175],"moonlightmead":[2955,5749,5811,5813,5815,5817,5891,5893,5895,5897,7750],"druidpouch":[2957,2958,7547],"silversickle":[2961,2963],"journal":[2967,3845,4203,6755],"chompybirdhat":[2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995],"energypotion":[3008,3010,3012,3014],"superenergy":[3016,3018,3020,3022,20548,20549,20550,20551],"superrestore":[3024,3026,3028,3030,23567,23569,23571,23573],"agilitypotion":[3032,3034,3036,3038],"magicpotion":[3040,3042,3044,3046],"lavabattlestaff":[3053,21198],"mysticlavastaff":[3054,21200],"mimemask":[3057,10629],"blackdart":[3093,3094,5631,5638],"climbingboots":[3105,20578,23413],"stoneball":[3109,3110,3111,3112,3113],"pastyjogrebones":[3128,3129,3131,3132],"marinatedjbones":[3130,3133],"prisonkey":[3135,6966],"cellkey":[3136,3137],"cookedkarambwan":[3144,3147,23533],"karambwanpaste":[3152,3153,3154],"karambwanjipaste":[3155,3156],"karambwanvessel":[3157,3159],"monkeybones":[3179,3180,3181,3182,3183,3185,3186],"barrelbomb":[3218,3219],"naphthamix":[3222,3223],"symbol":[3231,3233,3235,3237],"goutweed":[3261,4182],"myresnelm":[3327,3337],"bloodntarsnelm":[3329,3339],"ochresnelm":[3331,3341],"bruisebluesnelm":[3333,3343],"blamishmyreshell":[3345,3355],"blamishredshell":[3347,3357],"blamishochreshell":[3349,3359],"blamishblueshell":[3351,3361],"splitbarkhelm":[3385,10606,20568],"unfinishedpotion":[3406,4840,22408],"serum":[3408,3410,3412,3414,3416,3417,3418,3419],"oliveoil":[3422,3424,3426,3428],"sacredoil":[3430,3432,3434,3436],"gildedplatebody":[3481,10782],"shoe":[3680,3681,3682,3683,3684,3685],"enchantedlyre":[3690,3691,6125,6126,6127,13079,23458],"branch":[3692,7773],"hunterstalisman":[3696,3697],"promissorynote":[3709,21870],"kegofbeer":[3711,3801],"reddisk":[3715,3716,3743],"fullbucket":[3722,4693],"sealedvase":[3738,3739,3740],"archerhelm":[3749,20572],"warriorhelm":[3753,20571],"farseerhelm":[3755,20573],"saradominpage":[3827,3828,3829,3830],"zamorakpage":[3831,3832,3833,3834],"guthixpage":[3835,3836,3837,3838],"damagedbook":[3839,3841,3843,12607,12609,12611],"gamesnecklace":[3853,3855,3857,3859,3861,3863,3865,3867],"boardgamepiece":[3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106,7107],"stool":[3893,5732],"wildernesssword":[3981,13108,13109,13110,13111],"westernbanner":[3983,13141,13142,13143,13144],"eyeofgnome":[4008,4009],"mspeakamulet":[4021,4022],"ninjamonkeygreegree":[4024,4025],"zombiemonkeygreegree":[4029,4030],"monkey":[4033,7503,8942,19556],"saradominbanner":[4037,11891],"zamorakbanner":[4039,11892],"hoodedcloak":[4041,4042],"decorativesword":[4068,4503,4508,20483,24157],"decorativearmour":[4069,4070,4504,4505,4509,4510,10610,11893,11894,11895,11896,11897,11898,11899,11900,11901,20485,20487,20493,20495,20497,20499,20501,20503,20505,24158,24159,24162,24163,24164,24165,24166,24167,24168],"decorativehelm":[4071,4506,4511,20489,24160],"decorativeshield":[4072,4507,4512,20491,24161],"yoyo":[4079,10733],"salveamulet":[4081,10588,12017,12018],"sled":[4083,4084],"dragonplatelegs":[4087,4180,12415,20429],"mystichat":[4089,4099,4109,10601,10602,10603,20562,23047],"mysticrobetop":[4091,4101,4111,20425,23050],"mysticrobebottom":[4093,4103,4113,20426,23053],"mysticgloves":[4095,4105,4115,23056],"mysticboots":[4097,4107,4117,20579,23059],"crawlinghand":[4133,7975,8260],"broadarrows":[4150,4160],"abyssalwhip":[4151,4178,12773,12774,20405],"granitemaul":[4153,12848,20557,24225,24227],"leafbladedspear":[4158,4159],"slayersstaff":[4170,21255],"stick":[4179,9702],"extendedbrush":[4191,4192,4193],"decapitatedhead":[4197,4198,10842],"ringofcharos":[4202,6465],"letter":[4204,4615,6121,6756,6757,7966,21774],"consecrationseed":[4205,4206],"crystalbow":[4212,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,11748,11749,11750,11751,11752,11753,11754,11755,11756,11757,11758,16888,16889,23901,23902,23903,23983,23985,24123],"crystalshield":[4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,11759,11760,11761,11762,11763,11764,11765,11766,11767,11768,11769,16890,16891,23991,23993,24127],"nettletea":[4239,4240],"porcelaincup":[4244,7732,7735],"ectophial":[4251,4252],"modelship":[4253,4254],"bonemeal":[4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4852,4853,4854,4855,5615,6728,6810,11922,22116,22754,22756,22758],"mapscrap":[4274,4275,4276],"bedsheet":[4284,4285],"hamshirt":[4298,11274],"teamcape":[4315,4317,4319,4321,4323,4325,4327,4329,4331,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361,4363,4365,4367,4369,4371,4373,4375,4377,4379,4381,4383,4385,4387,4389,4391,4393,4395,4397,4399,4401,4403,4405,4407,4409,4411,4413,10638],"guthixrest":[4417,4419,4421,4423],"brokenvanepart":[4429,4431,4433],"antiquelamp":[4447,6543,7498,11137,11139,11141,11185,11186,11187,11188,11189,11679,13145,13146,13147,13148,21262,21640,21641,21642,23072,23082],"herbteamix":[4464,4466,4468,4470,4472,4474,4476,4478,4480,4482],"pole":[4494,4500],"castlewarshood":[4513,4515],"castlewarscloak":[4514,4516],"oillamp":[4522,4524],"candlelantern":[4529,4531,4532,4534],"oillantern":[4537,4539],"bullseyelantern":[4544,4546,4548,4550],"purplesweets":[4561,10476],"rubberchicken":[4566,10732,22666],"bookpage":[4569,4570,4571],"pages":[4572,4573],"schematic":[4575,4578],"schematics":[4576,4577],"cannonball":[4579,7119],"blackspear":[4580,4582,4584,5734,5736],"dragonplateskirt":[4585,12416],"dragonscimitar":[4587,20000,20406],"note":[4597,4598,21715],"oakblackjack":[4599,6408,6410],"willowblackjack":[4600,6412,6414],"ugthankidung":[4601,4602],"snakebasket":[4606,4607],"statuette":[4618,6785],"bandit":[4625,6781,6782],"blessedpot":[4659,4661,4663,4665,4667],"ancientstaff":[4675,20431],"catspeakamulet":[4677,6544],"canopicjar":[4678,4679,4680,4681],"goldleaf":[4692,8784],"sapphirelantern":[4700,4701,4702],"magicstone":[4703,8788],"ahrimshood":[4708,4856,4857,4858,4859,4860],"ahrimsstaff":[4710,4862,4863,4864,4865,4866,23653],"ahrimsrobetop":[4712,4868,4869,4870,4871,4872,20598],"ahrimsrobeskirt":[4714,4874,4875,4876,4877,4878,20599],"dharokshelm":[4716,4880,4881,4882,4883,4884,23639],"dharoksgreataxe":[4718,4886,4887,4888,4889,4890],"dharoksplatebody":[4720,4892,4893,4894,4895,4896],"dharoksplatelegs":[4722,4898,4899,4900,4901,4902,23633],"guthanshelm":[4724,4904,4905,4906,4907,4908,23638],"guthanswarspear":[4726,4910,4911,4912,4913,4914],"guthansplatebody":[4728,4916,4917,4918,4919,4920],"guthanschainskirt":[4730,4922,4923,4924,4925,4926],"karilscoif":[4732,4928,4929,4930,4931,4932],"karilscrossbow":[4734,4934,4935,4936,4937,4938],"karilsleathertop":[4736,4940,4941,4942,4943,4944,23632],"karilsleatherskirt":[4738,4946,4947,4948,4949,4950],"toragshelm":[4745,4952,4953,4954,4955,4956,23637],"toragshammers":[4747,4958,4959,4960,4961,4962],"toragsplatebody":[4749,4964,4965,4966,4967,4968],"toragsplatelegs":[4751,4970,4971,4972,4973,4974,23634],"veracshelm":[4753,4976,4977,4978,4979,4980,23636],"veracsflail":[4755,4982,4983,4984,4985,4986],"veracsbrassard":[4757,4988,4989,4990,4991,4992],"veracsplateskirt":[4759,4994,4995,4996,4997,4998,23635],"sithikportrait":[4814,4815],"ogreartefact":[4818,21837],"relicymsbalm":[4842,4844,4846,4848],"mininghelmet":[5013,5014],"minecartticket":[5020,5021,5022,5023],"woventop":[5024,5026,5028],"shirt":[5030,5032,5034],"trousers":[5036,5038,5040],"shorts":[5042,5044,5046],"skirt":[5048,5050,5052],"dwarf":[5054,7500],"dwarvenbattleaxe":[5056,5057,5058,5059,5060,5061],"birdnest":[5070,5071,5072,5073,5074,5075,7413,13653,22798,22800],"birdsegg":[5076,5077,5078],"varrockarmour":[5087,13104,13105,13106,13107],"morytanialegs":[5093,13112,13113,13114,13115],"explorersring":[5095,13125,13126,13127,13128],"potatoseed":[5318,7548],"onionseed":[5319,7550],"tomatoseed":[5322,7562],"wateringcan":[5331,5333,5334,5335,5336,5337,5338,5339,5340,6797],"oakseedling":[5358,5364],"willowseedling":[5359,5365],"mapleseedling":[5360,5366],"yewseedling":[5361,5367],"magicseedling":[5362,5368],"spiritseedling":[5363,5369],"apples":[5378,5380,5382,5384,5386],"oranges":[5388,5390,5392,5394,5396],"strawberries":[5398,5400,5402,5404,5406],"bananas":[5408,5410,5412,5414,5416],"emptysack":[5418,10486,21873],"potatoes":[5420,5422,5424,5426,5428,5430,5432,5434,5436,5438],"onions":[5440,5442,5444,5446,5448,5450,5452,5454,5456,5458],"cabbages":[5460,5462,5464,5466,5468,5470,5472,5474,5476,5478],"appleseedling":[5480,5488],"bananaseedling":[5481,5489],"orangeseedling":[5482,5490],"curryseedling":[5483,5491],"pineappleseedling":[5484,5492],"papayaseedling":[5485,5493],"palmseedling":[5486,5494],"calquatseedling":[5487,5495],"mediumpouch":[5510,5511],"largepouch":[5512,5513,6819],"giantpouch":[5514,5515],"scryingorb":[5518,5519],"roguemask":[5554,10612],"gear":[5562,5563,5564,5565,5566,5567],"tiles":[5569,5570,5571],"desertamulet":[5573,13133,13134,13135,13136],"initiatehauberk":[5575,10619],"metalspade":[5586,5587],"mixture":[5589,5590,5591],"tin":[5592,5593,5594,5595,5596,5597,5598,5599,5600],"hourglass":[5610,12841],"poisondagger":[5684,5702],"axemansfolly":[5751,5753,5819,5821,5823,5825,5899,5901,5903,5905],"chefsdelight":[5755,5757,5827,5829,5831,5833,5907,5909,5911,5913,7754,8244,8526],"slayersrespite":[5759,5761,5835,5837,5839,5841,5915,5917,5919,5921],"cider":[5763,5843,5845,5847,5849,5923,5925,5927,5929,7752],"mindbomb":[5795,5797,5799,5801,5875,5877,5879,5881],"antidote":[5942,5943,5945,5947,5949,5951,5952,5954,5956,5958],"tomatoes":[5960,5962,5964,5966,5968],"sweetcorn":[5986,7088],"marigolds":[6010,8214],"rosemary":[6014,8210],"leaves":[6020,6022,6024,6026,6028,6030],"plantcure":[6036,6468],"haysack":[6057,6058],"spirittree":[6063,20635],"mournertop":[6065,10621],"mournertrousers":[6066,6067],"teleportcrystal":[6099,6100,6101,6102,13102],"ghostlyboots":[6106,10607],"ghostlyrobe":[6107,6108],"squarestone":[6119,6120],"rockshellhelm":[6128,10613],"spinedhelm":[6131,10614],"skeletalhelm":[6137,10604],"rawpheasant":[6178,6179,11704],"lederhosentop":[6180,10633],"princessblouse":[6186,10630],"frogmask":[6188,10721],"rawfishlikething":[6200,6204],"fishlikething":[6202,6206],"broodooshield":[6215,6217,6219,6221,6223,6225,6227,6229,6231,6233,6235,6237,6239,6241,6243,6245,6247,6249,6251,6253,6255,6257,6259,6261,6263,6265,6267,6269,6271,6273,6275,6277,6279],"snakehide":[6287,7801],"spideronstick":[6293,6297],"spideronshaft":[6295,6299,6303],"snakeskinboots":[6328,20580],"tribalmask":[6335,6337,6339,10615,10616,10617],"tribaltop":[6341,6351,6361,6371],"villagerrobe":[6343,6353,6363,6373],"villagerhat":[6345,6355,6365,6375],"villagerarmband":[6347,6359,6369,6379],"villagersandals":[6349,6357,6367,6377],"deserttop":[6384,6388],"mapleblackjack":[6416,6418,6420],"kandarinheadgear":[6450,13137,13138,13139,13140],"orchidseed":[6458,6459],"whitetreeshoot":[6461,6462,6463],"compostpotion":[6470,6472,6474,6476],"agilityjump":[6514,6518,11793],"agilitybalance":[6515,6519],"agilitycontortion":[6516,6520],"agilityclimb":[6517,6521],"toktzxilak":[6523,20554],"tzhaarketom":[6528,23235],"present":[6542,13346,13656],"lazycat":[6549,6550,6551,6552,6553,6554],"wilycat":[6555,6556,6557,6558,6559,6560],"obsidiancape":[6568,10636,20050],"firecape":[6570,10566,10637,20445,24223],"onyxamulet":[6579,6581],"amuletoffury":[6585,12436,23640],"whitedagger":[6591,6593,6595,6597],"whiteplatebody":[6617,10618],"cyancrystal":[6643,22366],"fracturedcrystal":[6646,6647],"newlymadecrystal":[6651,6652],"camotop":[6654,6657,10632],"camobottoms":[6655,6658],"camohelmet":[6656,6659],"fishingexplosive":[6660,6664],"fishbowl":[6668,6669,6670,6671,6672],"guaminabox":[6677,6678],"seaweedinabox":[6679,6680],"saradominbrew":[6685,6687,6689,6691,23575,23577,23579,23581],"slayergloves":[6708,6720],"karamthulhu":[6716,6717],"zombiehead":[6722,10731,19912],"seersring":[6731,11770,23624],"archersring":[6733,11771],"warriorring":[6735,11772],"berserkerring":[6737,11773,23595],"darklight":[6746,8281],"scroll":[6758,7968,9721,10485,10512],"ratpole":[6773,6774,6775,6776,6777,6778,6779],"robeofelidinis":[6786,6787],"tornrobe":[6788,6789],"orb":[6821,6902],"starbauble":[6822,6823,6824,6825,6826,6827],"boxbauble":[6828,6829,6830,6831,6832,6833],"diamondbauble":[6834,6835,6836,6837,6838,6839],"treebauble":[6840,6841,6842,6843,6844,6845],"bellbauble":[6846,6847,6848,6849,6850,6851],"puppetbox":[6852,6854],"baublebox":[6853,6855],"bobblehat":[6856,9815],"bobblescarf":[6857,9816],"bluemarionette":[6865,6868,6875,6876,6877,6878,10730],"greenmarionette":[6866,6869,6879,6880,6881,6882],"redmarionette":[6867,6870,6871,6872,6873,6874],"progresshat":[6885,6886,6887],"magesbook":[6889,23652],"animalsbones":[6904,6905,6906,6907],"beginnerwand":[6908,20553],"apprenticewand":[6910,20556],"masterwand":[6914,20560],"infinitytop":[6916,10605,20574],"infinitybottoms":[6924,20575],"bonestopeaches":[6926,8015],"magicalorb":[6950,6951],"sandstone":[6971,6973,6975,6977,6985,6986],"granite":[6979,6981,6983],"stonehead":[6989,6990,6991,6992,7002],"fuse":[7109,10884,10985,10986],"stripypirateshirt":[7110,7122,7128,7134],"piratebandana":[7112,7124,7130,7136,8949],"pirateleggings":[7116,7126,7132,7138],"canister":[7118,7149],"repairplank":[7121,7148],"dragonhsword":[7158,20559],"mudpie":[7164,7166,7170],"gardenpie":[7172,7174,7178,7180],"fishpie":[7182,7184,7188,7190],"admiralpie":[7192,7194,7198],"wildpie":[7202,7204,7208,7210],"summerpie":[7212,7214,7218,7220],"redboater":[7319,10758],"orangeboater":[7321,10760],"greenboater":[7323,10762],"blueboater":[7325,10764],"blackboater":[7327,10766],"blackshield":[7332,7338,7344,7350,7356,10665,10668,10671,10674,10677],"adamantshield":[7334,7340,7346,7352,7358,10666,10669,10672,10675,10678],"runeshield":[7336,7342,7348,7354,7360,10667,10670,10673,10676,10679],"enchantedtop":[7399,10688],"magicsecateurs":[7409,11711],"queenssecateurs":[7410,9020],"fungicidespray":[7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431],"mithrilgloves":[7458,20581],"adamantgloves":[7459,20582],"runegloves":[7460,20583],"barrowsgloves":[7462,23593],"cornflour":[7463,7466],"brulee":[7473,7474,7475],"redspice":[7480,7481,7482,7483],"orangespice":[7484,7485,7486,7487],"brownspice":[7488,7489,7490,7491],"yellowspice":[7492,7493,7494,7495],"dwarvenrockcake":[7509,7510],"crabmeat":[7518,7519],"cookedcrabmeat":[7521,7523,7524,7525,7526],"divingapparatus":[7535,21723],"balloontoad":[7564,7565],"dummy":[7586,11267,11268,11269,11271],"coffin":[7587,7588,7589,7590,7591],"zombieshirt":[7592,10631],"item":[7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618],"bucketofrubble":[7622,7624,7626],"silvthrillrod":[7637,7638],"rodofivandis":[7639,7640,7641,7642,7643,7644,7645,7646,7647,7648],"guthixbalance":[7652,7654,7656,7658,7660,7662,7664,7666],"boxinggloves":[7671,7673],"potoftea":[7692,7694,7696,7698,7704,7706,7708,7710,7716,7718,7720,7722],"teapotwithleaves":[7700,7712,7724],"teapot":[7702,7714,7726],"toysoldier":[7759,7761],"toydoll":[7763,7765],"toymouse":[7767,7769],"rewardtoken":[7774,7775,7776,9474,10934,10935,10936,10942,10943,10944],"fishingtome":[7779,7780,7781],"agilitytome":[7782,7783,7784],"thievingtome":[7785,7786,7787],"slayertome":[7788,7789,7790],"miningtome":[7791,7792,7793],"firemakingtome":[7794,7795,7796],"woodcuttingtome":[7797,7798,7799],"goblinskull":[7812,7814],"boneinvinegar":[7813,7816,7819,7822,7825,7828,7831,7834,7837,7840,7843,7846,7849,7852,7855,7858,7861,7864,7867,7870,7873,7876,7879,7882,7885,7888,7891,7894,7897,7900,7903,7906,7909,7912,7915],"bearribs":[7815,7817],"ramskull":[7818,7820],"unicornbone":[7821,7823],"giantratbone":[7824,7826],"giantbatwing":[7827,7829],"wolfbone":[7830,7832],"batwing":[7833,7835],"ratbone":[7836,7838],"babydragonbone":[7839,7841],"ogreribs":[7842,7844],"jogrebone":[7845,7847],"zogrebone":[7848,7850],"mogrebone":[7851,7853],"monkeypaw":[7854,7856],"dagannothribs":[7857,7859],"snakespine":[7860,7862],"zombiebone":[7863,7865],"werewolfbone":[7866,7868],"mossgiantbone":[7869,7871],"firegiantbone":[7872,7874],"icegiantribs":[7875,7877],"terrorbirdwing":[7878,7880],"ghoulbone":[7881,7883],"trollbone":[7884,7886],"seagullwing":[7887,7889],"undeadcowribs":[7890,7892],"experimentbone":[7893,7895],"rabbitbone":[7896,7898],"basiliskbone":[7899,7901],"desertlizardbone":[7902,7904],"cavegoblinskull":[7905,7907],"bigfrogleg":[7908,7910],"vulturewing":[7911,7913],"jackalbone":[7914,7916],"easterring":[7927,10729],"freshmonkfish":[7942,7943],"monkfish":[7946,20547],"burntdiary":[7961,7962,7963,7964,7965],"cockatricehead":[7976,8261],"basiliskhead":[7977,8262],"kuraskhead":[7978,8263],"abyssalhead":[7979,8264],"kbdheads":[7980,8265],"kqhead":[7981,8266,22671],"stuffedkqhead":[7988,22673],"smallmap":[8004,8294],"mediummap":[8005,8295],"largemap":[8006,8296],"woodenbed":[8031,8576],"oakbed":[8032,8578],"largeoakbed":[8033,8580],"teakbed":[8034,8582],"largeteakbed":[8035,8584],"shoebox":[8038,8610],"oakdrawers":[8039,8612],"oakwardrobe":[8040,8614,9829],"teakdrawers":[8041,8616],"teakwardrobe":[8042,8618,9831],"mahoganywardrobe":[8043,8620,9833],"gildedwardrobe":[8044,8622,9834],"shavingstand":[8045,8596],"oakshavingstand":[8046,8598],"oakdresser":[8047,8600],"teakdresser":[8048,8602],"fancyteakdresser":[8049,8604],"mahoganydresser":[8050,8606],"gildeddresser":[8051,8608],"oakclock":[8052,8590],"teakclock":[8053,8592],"gildedclock":[8054,8594],"woodenbench":[8108,8562],"oakbench":[8109,8564],"carvedoakbench":[8110,8566],"teakdiningbench":[8111,8568],"carvedteakbench":[8112,8570],"mahoganybench":[8113,8572],"gildedbench":[8114,8574],"wooddiningtable":[8115,8548],"oakdiningtable":[8116,8550],"carvedoaktable":[8117,8552],"teaktable":[8118,8554],"carvedteaktable":[8119,8556],"mahoganytable":[8120,8558],"opulenttable":[8121,8560],"mahoganychest":[8151,8167],"magicalbalance":[8156,8157,8158],"fern":[8182,8186],"thornyhedge":[8203,8437],"nicehedge":[8204,8439],"smallboxhedge":[8205,8441],"topiaryhedge":[8206,8443],"fancyhedge":[8207,8445],"tallfancyhedge":[8208,8447],"tallboxhedge":[8209,8449],"woodenshelves":[8223,8224,8225],"oakshelves":[8226,8227],"teakshelves":[8228,8229],"beerbarrel":[8239,8516],"ciderbarrel":[8240,8518],"oakkitchentable":[8247,8530],"teakkitchentable":[8248,8532],"oakstaircase":[8249,8250,8251],"teakstaircase":[8252,8253,8254],"marblestaircase":[8255,8256,8257],"cwarmour":[8273,8274,8275],"runecase":[8276,8277,8278],"steelcage":[8299,8371],"spikes":[8302,10561],"woodenchair":[8310,8498],"rockingchair":[8311,8500],"oakchair":[8312,8502],"oakarmchair":[8313,8504],"teakarmchair":[8314,8506],"mahoganyarmchair":[8315,8508],"oakbookcase":[8320,8512],"mahoganybookcase":[8321,8514],"oaklectern":[8334,8534],"eaglelectern":[8335,8536],"demonlectern":[8336,8538],"teakeaglelectern":[8337,8540],"teakdemonlectern":[8338,8542],"mahoganyeagle":[8339,8544],"mahoganydemon":[8340,8546],"globe":[8341,8630],"ornamentalglobe":[8342,8632],"lunarglobe":[8343,8634],"celestialglobe":[8344,8636],"armillarysphere":[8345,8638],"smallorrery":[8346,8640],"largeorrery":[8347,8642],"woodentelescope":[8348,8644],"teaktelescope":[8349,8646],"mahoganytelescope":[8350,8648],"crystalball":[8351,8624],"elementalsphere":[8352,8626],"crystalofpower":[8353,8628],"trapdoor":[8367,8368,8369,8372],"craftingtable":[8380,8381,8382,8383],"toolstore":[8384,8385,8386,8387,8388],"hall":[8401,8402,8403,8404],"baggedplant":[8431,8433,8435],"runeheraldichelm":[8464,8466,8468,8470,8472,8474,8476,8478,8480,8482,8484,8486,8488,8490,8492,8494],"banner":[8650,8652,8654,8656,8658,8660,8662,8664,8666,8668,8670,8672,8674,8676,8678,8680],"steelheraldichelm":[8682,8684,8686,8688,8690,8692,8694,8696,8698,8700,8702,8704,8706,8708,8710,8712],"voidknighttop":[8839,10611,20465,24177],"voidknightrobe":[8840,20469,24179],"voidknightmace":[8841,20473,24181],"voidknightgloves":[8842,20475,24182],"bronzedefender":[8844,20449,24136],"irondefender":[8845,20451,24137],"steeldefender":[8846,20453,24138],"blackdefender":[8847,20455,24139],"mithrildefender":[8848,20457,24140],"adamantdefender":[8849,20459,24141],"runedefender":[8850,20461,23230,24142],"zanik":[8870,8887,8888,8889,11062],"bonedagger":[8872,8874,8876,8878],"blackmask":[8901,8903,8905,8907,8909,8911,8913,8915,8917,8919,8921,11774,11775,11776,11777,11778,11779,11780,11781,11782,11783,11784],"bandanaeyepatch":[8924,8925,8926,8927],"rum":[8940,8941],"bluemonkey":[8943,8944,8945],"redmonkey":[8946,8947,8948],"brewinguide":[8989,8990],"skullsceptre":[9013,21276],"magicessence":[9019,9021,9022,9023,9024],"pharaohssceptre":[9044,9046,9048,9050,13074,13075,13076,13077,13078],"emeraldlantern":[9064,9065,20722],"moonclanhat":[9069,10608],"astralrune":[9075,11699],"kindling":[9094,20799],"lunarhelm":[9096,10609],"bluritebolts":[9139,9286,9293,9300,9376],"ironbolts":[9140,9287,9294,9301,9377],"steelbolts":[9141,9288,9295,9302,9378],"mithrilbolts":[9142,9289,9296,9303,9379],"adamantbolts":[9143,9290,9297,9304,9380],"runitebolts":[9144,9291,9298,9305,9381],"silverbolts":[9145,9292,9299,9306,9382],"bronzecrossbow":[9174,9454],"bluritecrossbow":[9176,9456],"ironcrossbow":[9177,9457],"steelcrossbow":[9179,9459],"adamantcrossbow":[9183,9463],"runecrossbow":[9185,23601],"jadebolts":[9237,9335],"topazbolts":[9239,9336],"sapphirebolts":[9240,9337],"emeraldbolts":[9241,9338],"rubybolts":[9242,9339],"diamondbolts":[9243,9340,23649],"dragonstonebolts":[9244,9341],"onyxbolts":[9245,9342],"mithgrapple":[9418,9419],"halfmadebatta":[9478,9480,9482,9483,9485],"halfmadebowl":[9558,9559,9561,9563],"mixedsaturday":[9571,9572,9573],"mixeddragon":[9574,9575,9576],"halfmadecrunchy":[9577,9579,9581,9583],"dossier":[9589,9590],"castlesketch":[9646,9647,9648],"tomeofexperience":[9656,9657,9658,22415],"uselesskey":[9662,16684],"proselytesallet":[9672,20563],"proselytehauberk":[9674,10620,20564],"proselytecuisse":[9676,20565],"page":[9684,9685,9686],"fragment":[9687,9688,9689],"pipe":[9723,10871],"combatpotion":[9739,9741,9743,9745],"attackcape":[9747,9748,10639],"strengthcape":[9750,9751,10640],"defencecape":[9753,9754,10641],"rangingcape":[9756,9757,10642],"prayercape":[9759,9760,10643],"magiccape":[9762,9763,10644],"runecraftcape":[9765,9766,10645],"hitpointscape":[9768,9769,10647],"agilitycape":[9771,9772,10648,13340,13341],"herblorecape":[9774,9775,10649],"thievingcape":[9777,9778,10650],"craftingcape":[9780,9781,10651],"fletchingcape":[9783,9784,10652],"slayercape":[9786,9787,10653],"constructcape":[9789,9790,10654],"miningcape":[9792,9793,10655],"smithingcape":[9795,9796,10656],"fishingcape":[9798,9799,10657],"cookingcape":[9801,9802,10658],"firemakingcape":[9804,9805,10659],"woodcuttingcape":[9807,10660],"farmingcape":[9810,9811,10661],"questpointcape":[9813,10662,13068],"oakcaperack":[9817,9843],"teakcaperack":[9818,9844],"mahoganycaperack":[9819,9845],"gildedcaperack":[9820,9846],"marblecaperack":[9821,9847],"oakarmourcase":[9826,9859],"teakarmourcase":[9827,9860],"mahoganyarmourcase":[9828,9861],"oaktoybox":[9836,9849],"teaktoybox":[9837,9850],"mahoganytoybox":[9838,9851],"oaktreasurechest":[9839,9862],"teaktreasurechest":[9840,9863],"ghostbuster":[9906,9907,9908,9909,9910,9911,9912],"jacklanternmask":[9920,10723],"skeletonboots":[9921,10724],"skeletongloves":[9922,10725],"skeletonleggings":[9923,10726],"skeletonshirt":[9924,10727],"skeletonmask":[9925,10728],"bomberjacket":[9944,11135],"huntercape":[9948,9949,10646],"kebbit":[9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964],"butterfly":[9970,9971,9972,9973],"chinchompa":[9976,10033],"redchinchompa":[9977,10034],"hunterpotion":[9998,10000,10002,10004],"falconersglove":[10023,10024],"impinabox":[10027,10028],"kyatttop":[10037,10622],"larupiatop":[10043,10623],"graahktop":[10049,10624],"woodcamotop":[10053,10625],"junglecamotop":[10057,10626],"desertcamotop":[10061,10627],"polarcamotop":[10065,10628],"spottedcape":[10069,10073,10663],"spottiercape":[10071,10074,10664],"bobsredshirt":[10316,10714],"bobsblueshirt":[10318,10715],"bobsgreenshirt":[10320,10716],"bobsblackshirt":[10322,10717],"bobspurpleshirt":[10324,10718],"3rdagerobetop":[10338,20576],"3rdagerobe":[10340,20577],"strengthamulet":[10364,10736],"zamorakdhide":[10370,10790],"saradomindhide":[10386,10792],"apowderedwig":[10392,10740],"flaredtrousers":[10394,10742],"pantaloons":[10396,10744],"sleepingcap":[10398,10746],"blackelegantshirt":[10400,10748],"redelegantshirt":[10404,10750],"blueelegantshirt":[10408,10752],"greenelegantshirt":[10412,10754],"purpleelegantshirt":[10416,10756],"saradominrobetop":[10458,10784],"zamorakrobetop":[10460,10786],"guthixrobetop":[10462,10788],"avasaccumulator":[10499,23609],"reindeerhat":[10507,10722],"fremennikseaboots":[10510,13129,13130,13131,13132],"attackerhorn":[10516,10517,10518,10519,10520],"collectionbag":[10521,10522,10523,10524,10525],"healerhorn":[10526,10527,10528,10529,10530],"healingvial":[10542,10543,10544,10545,10546],"healerhat":[10547,20511,24172],"fighterhat":[10548,20507,24173],"rangerhat":[10550,20509,24174],"fightertorso":[10551,20513,24175],"penancegloves":[10553,10554],"penanceskirt":[10555,20515,24176],"attackericon":[10556,22346,22347,22348,22349,22721,22722,22723,22729,22730,23460,23461,23462,23463,23464,23465],"collectoricon":[10557,22312,22313,22314,22315,22337,22338,22339,22724,23471,23472,23473,23474,23475,23476,23477],"defendericon":[10558,22340,22341,22342,22343,22344,22345,22725,22726,22727,22728,23466,23467,23468,23469,23470],"healericon":[10559,10567,20802,22308,22309,22310,22311,23478,23479,23480,23481,23482,23483,23484,23485,23486],"keris":[10581,10582,10583,10584],"parchment":[10585,11036],"clockworksuit":[10595,10596],"missionreport":[10597,10598,10599],"dhidebody":[10682,10683,10684,10685],"wizardrobe":[10686,10687],"yakhidearmour":[10822,10824],"helmofneitiznot":[10828,23591],"hardhat":[10862,10883],"keg":[10885,10898],"prayerbook":[10886,10890],"barrelchestanchor":[10887,10888],"mixturestep":[10909,10911,10913,10915,10917,10919,10921,10923],"sanfewserum":[10925,10927,10929,10931,23559,23561,23563,23565],"lumberjacktop":[10939,10945],"skullstaples":[10950,10951],"cog":[10983,10984],"meter":[10987,10988],"capacitor":[10989,10990],"powerbox":[10993,10994],"chickenhead":[11015,11021],"chickenfeet":[11016,11019],"chickenwings":[11017,11020],"chickenlegs":[11018,11022],"rottenbarrel":[11044,11045],"artefact":[11049,11051,11053,11055,11057,11059],"goldbracelet":[11068,11069],"sapphirebracelet":[11071,11072],"emeraldbracelet":[11076,11078],"castlewarsbracelet":[11079,11081,11083],"rubybracelet":[11085,11087],"diamondbracelet":[11092,11094],"abyssalbracelet":[11095,11097,11099,11101,11103],"skillsnecklace":[11105,11107,11109,11111,11113,11968,11970],"combatbracelet":[11118,11120,11122,11124,11126,11972,11974],"berserkernecklace":[11128,23240],"onyxbracelet":[11130,11132],"dreamvial":[11151,11152,11153],"newspaper":[11169,11171],"halfcertificate":[11173,11174],"digsitependant":[11190,11191,11192,11193,11194],"dragonarrow":[11212,11227,11228,11229,20389],"dragonfirearrows":[11217,11222],"dragondart":[11230,11231,11233,11234],"darkbow":[11235,12765,12766,12767,12768,20408],"cavaliermask":[11277,11280],"beretmask":[11278,11282],"dragonfireshield":[11283,11284],"dragonhelm":[11335,12417],"ancientpage":[11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365,11366,12621,12622,12623,12624],"bronzehasta":[11367,11379,11381,11382,11384],"ironhasta":[11369,11386,11388,11389,11391],"steelhasta":[11371,11393,11395,11396,11398],"mithrilhasta":[11373,11400,11402,11403,11405],"adamanthasta":[11375,11407,11409,11410,11412],"runehasta":[11377,11414,11416,11417,11419],"fishvial":[11427,11428],"attackmix":[11429,11431],"antipoisonmix":[11433,11435],"relicymsmix":[11437,11439],"strengthmix":[11441,11443],"combatmix":[11445,11447],"restoremix":[11449,11451],"energymix":[11453,11455],"defencemix":[11457,11459],"agilitymix":[11461,11463],"prayermix":[11465,11467],"superattackmix":[11469,11471],"antipoisonsupermix":[11473,11475],"fishingmix":[11477,11479],"superenergymix":[11481,11483],"superstrmix":[11485,11487],"magicessencemix":[11489,11491],"superrestoremix":[11493,11495],"superdefmix":[11497,11499],"antidotemix":[11501,11503],"antifiremix":[11505,11507],"rangingmix":[11509,11511],"magicmix":[11513,11515],"huntingmix":[11517,11519],"zamorakmix":[11521,11523],"voidmagehelm":[11663,11674,20477,24183],"voidrangerhelm":[11664,11675,20479,24184],"voidmeleehelm":[11665,11676,20481,24185],"voidseal":[11666,11667,11668,11669,11670,11671,11672,11673],"beachboxinggloves":[11705,11706],"superranging":[11722,11723,11724,11725],"supermagicpotion":[11726,11727,11728,11729],"overload":[11730,11731,11732,11733,20985,20986,20987,20988,20989,20990,20991,20992,20993,20994,20995,20996],"absorption":[11734,11735,11736,11737],"armadylcrossbow":[11785,23611],"steambattlestaff":[11787,12795],"mysticsteamstaff":[11789,12796],"staffofthedead":[11791,23613],"godswordshards":[11794,11796,11800],"armadylgodsword":[11802,20368,20593,22665],"bandosgodsword":[11804,20370,20782,21060],"saradomingodsword":[11806,20372],"zamorakgodsword":[11808,20374],"godswordshard":[11818,11820,11822],"bandostassets":[11834,23646],"dragonboots":[11840,22234],"knightsnotes":[11842,11843],"gracefulhood":[11850,11851,13579,13580,13591,13592,13603,13604,13615,13616,13627,13628,13667,13668,21061,21063],"gracefulcape":[11852,11853,13581,13582,13593,13594,13605,13606,13617,13618,13629,13630,13669,13670,21064,21066],"gracefultop":[11854,11855,13583,13584,13595,13596,13607,13608,13619,13620,13631,13632,13671,13672,21067,21069],"gracefullegs":[11856,11857,13585,13586,13597,13598,13609,13610,13621,13622,13633,13634,13673,13674,21070,21072],"gracefulgloves":[11858,11859,13587,13588,13599,13600,13611,13612,13623,13624,13635,13636,13675,13676,21073,21075],"gracefulboots":[11860,11861,13589,13590,13601,13602,13613,13614,13625,13626,13637,13638,13677,13678,21076,21078],"slayerhelmet":[11864,11865,19639,19641,19643,19645,19647,19649,21264,21266,21888,21890,23073,23075],"slayerring":[11866,11867,11868,11869,11870,11871,11872,11873,21268],"trident":[11905,11907,11908,22288,22290],"boxofchocolatestrawberries":[11912,11914],"dragonpickaxe":[11920,12797],"maledictionward":[11924,12806],"odiumward":[11926,12807],"odiumshard":[11928,11929,11930],"maledictionshard":[11931,11932,11933],"lootingbag":[11941,22586],"extendedantifire":[11951,11953,11955,11957],"extendedantifiremix":[11960,11962],"occultnecklace":[12002,19720,23654],"softclaypack":[12009,12010],"blackwizardrobe":[12449,12451],"blackwizardhat":[12453,12455],"ringofthegods":[12601,13202],"tyrannicalring":[12603,12691],"treasonousring":[12605,12692],"bandospage":[12613,12614,12615,12616],"armadylpage":[12617,12618,12619,12620],"staminapotion":[12625,12627,12629,12631,23583,23585,23587,23589],"staminamix":[12633,12635],"saradominhalo":[12637,20537,24169],"zamorakhalo":[12638,20539,24170],"guthixhalo":[12639,20541,24171],"kalphiteprincess":[12647,12654],"petsmokedevil":[12648,22663],"junk":[12656,12657],"clanwarscape":[12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,12687,12688,12689,12690,21396,21397,21398,21399,21400,21401,21402,21403,21404,21405,21406,21407,21408,21409,21410,21411,21412,21413,21414,21415,21416,21417,21418,21419,21420,21421,21422,21423,21424,21425,21426,21427],"supercombatpotion":[12695,12697,12699,12701,23543,23545,23547,23549],"menagerie":[12725,12726],"mysteriousemblem":[12746,12748,12749,12750,12751,12752,12753,12754,12755,12756],"runepouch":[12791,23650],"nestbox":[12792,12793,12794,13654,23062],"elysianspiritshield":[12817,19559],"spiritshield":[12829,23599],"blessedspiritshield":[12831,23642],"amuletofthedamned":[12851,12853],"thanksgivingdinner":[12861,12862],"antisantascoalbox":[12897,12898],"toxictrident":[12899,12900,22292,22294],"toxicstaff":[12902,12904],"antivenom":[12905,12907,12909,12911,12913,12915,12917,12919],"petsnakeling":[12921,12939,12940],"toxicblowpipe":[12924,12926],"serpentinehelm":[12929,12931,13196,13197,13198,13199],"dragondefender":[12954,19722,20463,23597,24143],"bronzeset":[12960,12962],"bronzetrimmedset":[12964,12966],"bronzegoldtrimmedset":[12968,12970],"ironset":[12972,12974],"irontrimmedset":[12976,12978],"irongoldtrimmedset":[12980,12982],"steelset":[12984,12986],"blackset":[12988,12990],"blacktrimmedset":[12992,12994],"blackgoldtrimmedset":[12996,12998],"mithrilset":[13000,13002],"mithriltrimmedset":[13004,13006],"mithrilgoldtrimmedset":[13008,13010],"adamantset":[13012,13014],"adamanttrimmedset":[13016,13018],"adamantgoldtrimmedset":[13020,13022],"runearmourset":[13024,13026],"runetrimmedset":[13028,13030],"runegoldtrimmedset":[13032,13034],"gildedarmourset":[13036,13038],"saradominarmourset":[13040,13042],"zamorakarmourset":[13044,13046],"guthixarmourset":[13048,13050],"armadylrunearmourset":[13052,13054],"bandosrunearmourset":[13056,13058],"ancientrunearmourset":[13060,13062],"achievementdiarycape":[13069,19476],"elitevoidtop":[13072,20467,24178],"elitevoidrobe":[13073,20471,24180],"crystalhalberd":[13080,13081,13082,13083,13084,13085,13086,13087,13088,13089,13090,13091,13092,13093,13094,13095,13096,13097,13098,13099,13100,13101,16892,16893,23895,23896,23897,23987,23989,24125],"vetionjr":[13179,13180],"oldschoolbond":[13190,13192],"musiccape":[13221,13222,13224],"eternalboots":[13235,23644],"infernalaxe":[13241,13242],"infernalpickaxe":[13243,13244],"abyssaldagger":[13265,13267,13269,13271],"maxcape":[13280,13282,13342],"bankkey":[13302,13303,13304,13305,13306],"deadmanschest":[13317,24189],"deadmanslegs":[13318,24190],"deadmanscape":[13319,24191],"rockgolem":[13321,21187,21188,21189,21190,21191,21192,21193,21194,21195,21196,21197,21340,21358,21359,21360],"babychinchompa":[13323,13324,13325,13326],"firemaxcape":[13329,20447,21186,24134],"vialoftears":[13347,13348,13349,13350,13351],"shayziengloves":[13357,13362,13367,13372,13377],"shayzienboots":[13358,13363,13368,13373,13378],"shayzienhelm":[13359,13364,13369,13374,13379],"shayziengreaves":[13360,13365,13370,13375,13380],"shayzienplatebody":[13361,13366,13371,13376,13381],"xericstalisman":[13392,13393],"serveryincompletestew":[13415,13416],"ensouledgoblinhead":[13447,13448],"ensouledmonkeyhead":[13450,13451],"ensouledimphead":[13453,13454],"ensouledminotaurhead":[13456,13457],"ensouledscorpionhead":[13459,13460],"ensouledbearhead":[13462,13463],"ensouledunicornhead":[13465,13466],"ensouleddoghead":[13468,13469],"ensouledchaosdruidhead":[13471,13472],"ensouledgianthead":[13474,13475],"ensouledogrehead":[13477,13478],"ensouledelfhead":[13480,13481],"ensouledtrollhead":[13483,13484],"ensouledhorrorhead":[13486,13487],"ensouledkalphitehead":[13489,13490],"ensouleddagannothhead":[13492,13493],"ensouledbloodveldhead":[13495,13496],"ensouledtzhaarhead":[13498,13499],"ensouleddemonhead":[13501,13502],"ensouledaviansiehead":[13504,13505],"ensouledabyssalhead":[13507,13508],"ensouleddragonhead":[13510,13511],"darkmanuscript":[13514,13515,13516,13517,13518,13519,13520,13521,13522,13523],"shayziensupplygloves":[13538,13543,13548,13553,13558],"shayziensupplyboots":[13539,13544,13549,13554,13559],"shayziensupplyhelm":[13540,13545,13550,13555,13560],"shayziensupplygreaves":[13541,13546,13551,13556,13561],"shayziensupplyplatebody":[13542,13547,13552,13557,13562],"shayziensupplyset":[13565,13566,13567,13568,13569],"dragonwarhammer":[13576,20785],"farmersborotrousers":[13640,13641],"farmersboots":[13644,13645],"farmersstrawhat":[13646,13647,21253,21254],"cluebottle":[13648,13649,13650,13651,23129],"dragonclaws":[13652,20784],"heavyballista":[19481,23630],"dragonjavelin":[19484,19486,19488,19490,23648],"zenytebracelet":[19492,19532],"zenyteamulet":[19501,19541],"mysteriousnote":[19505,19507,19509],"satchel":[19527,19528],"tormentedbracelet":[19544,23444],"necklaceofanguish":[19547,22249],"ringofsuffering":[19550,19710,20655,20657],"amuletoftorture":[19553,20366],"botanicalpie":[19659,19662],"cluenest":[19712,19714,19716,19718,23127],"rewardcasket":[19836,20543,20544,20545,20546,23245],"torncluescroll":[19837,19838,19839],"strangedevice":[19939,23183],"buckethelm":[19991,20059],"gnomishfirelighter":[20275,20278],"cluegeode":[20358,20360,20362,20364,23442],"steeltrimmedset":[20376,20379],"steelgoldtrimmedset":[20382,20385],"stashunits":[20532,20533,20534,20535,20536,23416],"darkaltar":[20619,22778],"occultaltar":[20620,20621,20622],"riftguardian":[20665,20667,20669,20671,20673,20675,20677,20679,20681,20683,20685,20687,20689,20691,21990],"rejuvenationpotion":[20697,20699,20700,20701,20702],"tomeoffire":[20714,20716],"manorkey":[20766,21052],"rubykey":[20767,21053],"emeraldkey":[20768,21054],"sapphirekey":[20769,21055],"killersknife":[20781,21059],"dragonthrownaxe":[20849,21207],"elder":[20913,20914,20915,20916,20921,20922,20923,20924],"elderpotion":[20917,20918,20919,20920],"twisted":[20925,20926,20927,20928,20933,20934,20935,20936],"twistedpotion":[20929,20930,20931,20932],"kodai":[20937,20938,20939,20940,20945,20946,20947,20948],"kodaipotion":[20941,20942,20943,20944],"revitalisation":[20949,20950,20951,20952,20957,20958,20959,20960],"revitalisationpotion":[20953,20954,20955,20956,22096],"prayerenhance":[20961,20962,20963,20964,20965,20966,20967,20968,20969,20970,20971,20972],"xericsaid":[20973,20974,20975,20976,20977,20978,20979,20980,20981,20982,20983,20984],"eldermaul":[21003,21205],"kodaiwand":[21006,23626],"dragonsword":[21009,21206],"infernalharpoon":[21031,21033],"mediumstorageunit":[21038,21040],"largestorageunit":[21039,21041,21042],"opalamulet":[21099,21108],"jadeamulet":[21102,21111],"topazamulet":[21105,21114],"ringofreturning":[21129,21132,21134,21136,21138],"necklaceofpassage":[21146,21149,21151,21153,21155],"burningamulet":[21166,21169,21171,21173,21175],"mysteriousorb":[21261,23069],"infernalmaxcape":[21284,21285,21289,24133],"infernalcape":[21287,21295,21297,23622,24224],"amethystjavelin":[21318,21320,21322,21324],"amethystarrow":[21326,21332,21334,21336],"amethystfirearrows":[21328,21330],"masterscrollbook":[21387,21389],"wildernesscape":[21428,21429,21430,21431,21432,21434,21435,21436,21437,21438],"teakseedling":[21469,21473],"mahoganyseedling":[21471,21475],"fossilislandwyvern":[21507,21508],"ancientwyvernshield":[21633,21634],"mushroompie":[21687,21690],"jonasmask":[21719,21720],"granitering":[21739,21752],"imbuedsaradominmaxcape":[21776,24232,24238],"imbuedzamorakmaxcape":[21780,24233,24246],"imbuedguthixmaxcape":[21784,24234,24242],"imbuedsaradomincape":[21791,23607,24236,24248],"imbuedguthixcape":[21793,23603,24240,24249],"imbuedzamorakcape":[21795,23605,24244,24250],"braceletofethereum":[21816,21817],"snowimpcostumehead":[21841,21847],"snowimpcostumebody":[21842,21849],"snowimpcostumelegs":[21843,21851],"snowimpcostumetail":[21844,21853],"snowimpcostumegloves":[21845,21855],"snowimpcostumefeet":[21846,21857],"santasuit":[21866,21867,21868],"wrathrune":[21880,22208],"dragonarmourset":[21882,21885],"dragonplatebody":[21892,22242],"dragonkiteshield":[21895,22244],"assemblermaxcape":[21898,21916,24135],"dragoncrossbow":[21902,21921],"dragonbolts":[21905,21924,21926,21928,21930],"mythicalcape":[21913,22114],"avasassembler":[21914,22109,24222],"opaldragonbolts":[21932,21955],"jadedragonbolts":[21934,21957],"pearldragonbolts":[21936,21959],"topazdragonbolts":[21938,21961],"sapphiredragonbolts":[21940,21963],"emeralddragonbolts":[21942,21965],"rubydragonbolts":[21944,21967],"diamonddragonbolts":[21946,21969],"dragonstonedragonbolts":[21948,21971],"onyxdragonbolts":[21950,21973],"superantifirepotion":[21978,21981,21984,21987],"superantifiremix":[21994,21997],"dragonfireward":[22002,22003],"mappiece":[22009,22010,22011,22012,22013,22014,22015,22016,22017,22018,22019,22020,22021,22022,22023,22024,22025,22026,22027,22028,22029,22030,22031,22032],"oldnotes":[22051,22053,22055,22057,22059,22061,22063,22065,22067,22069,22071,22073,22075,22077,22410,22774,23023,23025,23027,23029,23031,23033,23035],"dragonkey":[22087,22092],"dragonkeypiece":[22088,22089,22090,22091],"adamantheraldichelm":[22159,22161,22163,22165,22167,22169,22171,22173,22175,22177,22179,22181,22183,22185,22187,22189],"extendedsuperantifire":[22209,22212,22215,22218],"extendedsuperantifiremix":[22221,22224],"avernicdefender":[22322,22441,24186],"sanguinestistaff":[22323,22481],"ghrazirapier":[22324,23628],"scytheofvitur":[22325,22486,22664],"bryophytasstaff":[22368,22370],"vialofblood":[22405,22446],"battlemagepotion":[22449,22452,22455,22458],"bastionpotion":[22461,22464,22467,22470],"sinhazashroudtier":[22494,22496,22498,22500,22502],"coinpouch":[22521,22522,22523,22524,22525,22526,22527,22528,22529,22530,22531,22532,22533,22534,22535,22536,22537,22538],"viggoraschainmace":[22542,22545],"crawsbow":[22547,22550],"thammaronssceptre":[22552,22555],"vestaslongsword":[22613,23615],"statiusswarhammer":[22622,23620],"morrigansjavelin":[22636,23619],"zurielsstaff":[22647,23617],"dragonhasta":[22731,22734,22737,22740,22743],"ikklehydra":[22746,22748,22750,22752],"energydisk":[22765,22766,22767,22768],"unknownfluid":[22769,22770,22771,22772,22773],"dragonfruitpie":[22792,22795],"radasblessing":[22803,22941,22943,22945,22947],"dragonknife":[22804,22806,22808,22810,22812,22814],"cormorantsglove":[22816,22817],"celastrusseedling":[22848,22852],"redwoodseedling":[22850,22854],"dragonfruitseedling":[22862,22864],"bottomlesscompostbucket":[22994,22997],"bottleddragonbreath":[22999,23002],"treasurescroll":[23067,23068,23070],"mysticset":[23110,23113,23116,23119],"runescimitarornamentkit":[23321,23324,23327],"gianteggsac":[23517,23520],"crystalseedling":[23655,23657],"crystalaxe":[23673,23675,23862],"crystalpickaxe":[23680,23682,23863],"divinesupercombatpotion":[23685,23688,23691,23694],"divinesuperattackpotion":[23697,23700,23703,23706],"divinesuperstrengthpotion":[23709,23712,23715,23718],"divinesuperdefencepotion":[23721,23724,23727,23730],"divinerangingpotion":[23733,23736,23739,23742],"divinemagicpotion":[23745,23748,23751,23754],"crystalharpoon":[23762,23764,23864],"crystaldust":[23804,23867,23964],"crystalseed":[23808,23810],"weaponframe":[23834,23871],"grymleaf":[23835,23875],"linumtirinum":[23836,23876],"phrenbark":[23838,23878],"corruptedbody":[23843,23844,23845],"corruptedlegs":[23846,23847,23848],"corruptedhalberd":[23849,23850,23851],"corruptedstaff":[23852,23853,23854],"corruptedbow":[23855,23856,23857],"egniolpotion":[23882,23883,23884,23885],"crystalhelm":[23886,23887,23888,23971,23973],"crystalbody":[23889,23890,23891,23975,23977],"crystallegs":[23892,23893,23894,23979,23981],"crystalstaff":[23898,23899,23900],"crystalcrown":[23911,23913,23915,23917,23919,23921,23923,23925],"bladeofsaeldor":[23995,23997],"elventop":[24009,24015,24021,24027],"elvenskirt":[24012,24018],"memoriamcrystal":[24030,24031,24032,24033],"armadylhalo":[24147,24192,24194],"bandoshalo":[24149,24195,24197],"serenhalo":[24151,24198,24200],"ancienthalo":[24153,24201,24203],"brassicahalo":[24155,24204,24206],"victorscape":[24207,24209,24211,24213,24215],"unsealedletter":[24256,24257],"vsigil":[24258,24259],"vsshield":[24265,24266]} \ No newline at end of file +{ + "toolkit": [ + 1, + 4051 + ], + "excalibur": [ + 35, + 8280 + ], + "longbow": [ + 48, + 839 + ], + "shortbow": [ + 50, + 841 + ], + "oak shortbow": [ + 54, + 843 + ], + "oak longbow": [ + 56, + 845 + ], + "willow longbow": [ + 58, + 847 + ], + "willow shortbow": [ + 60, + 849 + ], + "maple longbow": [ + 62, + 851 + ], + "maple shortbow": [ + 64, + 853, + 20403 + ], + "yew longbow": [ + 66, + 855 + ], + "yew shortbow": [ + 68, + 857, + 20401 + ], + "magic longbow": [ + 70, + 859 + ], + "magic shortbow": [ + 72, + 861, + 12788, + 20558 + ], + "lever": [ + 83, + 10991, + 10992 + ], + "boots of lightness": [ + 88, + 89 + ], + "strength potion": [ + 113, + 115, + 117, + 119 + ], + "attack potion": [ + 121, + 123, + 125, + 2428 + ], + "restore potion": [ + 127, + 129, + 131, + 2430 + ], + "defence potion": [ + 133, + 135, + 137, + 2432 + ], + "prayer potion": [ + 139, + 141, + 143, + 2434, + 20393, + 20394, + 20395, + 20396 + ], + "super attack": [ + 145, + 147, + 149, + 2436 + ], + "fishing potion": [ + 151, + 153, + 155, + 2438 + ], + "super strength": [ + 157, + 159, + 161, + 2440 + ], + "super defence": [ + 163, + 165, + 167, + 2442 + ], + "ranging potion": [ + 169, + 171, + 173, + 2444, + 23551, + 23553, + 23555, + 23557 + ], + "antipoison": [ + 175, + 177, + 179, + 2446 + ], + "superantipoison": [ + 181, + 183, + 185, + 2448 + ], + "weapon poison": [ + 187, + 1465, + 5936, + 5937, + 5939, + 5940 + ], + "zamorak brew": [ + 189, + 191, + 193, + 2450 + ], + "potion": [ + 195, + 2394, + 22409 + ], + "vial of water": [ + 227, + 9086 + ], + "vial": [ + 229, + 2389, + 2390, + 23839, + 23879 + ], + "pestle and mortar": [ + 233, + 23865 + ], + "unicorn horn": [ + 237, + 1487 + ], + "wine of zamorak": [ + 245, + 23489 + ], + "key": [ + 275, + 293, + 298, + 423, + 1543, + 1544, + 1545, + 1546, + 1547, + 1548, + 2411, + 2832, + 2834, + 2836, + 2838, + 2840, + 3606, + 3608, + 5010, + 6104, + 7297, + 7299, + 7302, + 9722, + 11039, + 11040, + 11041, + 11042, + 11043, + 19761, + 19812 + ], + "sheep bones": [ + 280, + 281, + 282, + 283 + ], + "notes": [ + 291, + 20770, + 20771, + 20772, + 21056, + 21057, + 21058 + ], + "glarials urn": [ + 296, + 297 + ], + "small fishing net": [ + 303, + 6209 + ], + "raw shrimps": [ + 317, + 2514 + ], + "burnt fish": [ + 323, + 343, + 357, + 367, + 369, + 20854, + 23873 + ], + "shark": [ + 385, + 6969, + 20390 + ], + "casket": [ + 405, + 2714, + 2715, + 2717, + 2718, + 2720, + 2721, + 2724, + 2726, + 2728, + 2730, + 2732, + 2734, + 2736, + 2738, + 2740, + 2742, + 2744, + 2746, + 2748, + 2775, + 2777, + 2779, + 2781, + 2784, + 2787, + 2789, + 2791, + 2802, + 2804, + 2806, + 2808, + 2810, + 2812, + 2814, + 2816, + 2818, + 2820, + 2822, + 2824, + 2826, + 2828, + 2830, + 3511, + 3517, + 3519, + 3521, + 3523, + 3527, + 3529, + 3531, + 3533, + 3535, + 3537, + 3539, + 3541, + 3543, + 3545, + 3547, + 3549, + 3551, + 3553, + 3555, + 3557, + 3559, + 3561, + 3563, + 3581, + 3583, + 3585, + 3587, + 3589, + 3591, + 3593, + 3595, + 3597, + 3600, + 3603, + 7237, + 7240, + 7242, + 7244, + 7246, + 7257, + 7259, + 7261, + 7263, + 7265, + 7267, + 7287, + 7289, + 7291, + 7293, + 7295, + 7306, + 7308, + 7310, + 7312, + 7314, + 7316, + 7318, + 7956, + 10181, + 10183, + 10185, + 10187, + 10189, + 10191, + 10193, + 10195, + 10197, + 10199, + 10201, + 10203, + 10205, + 10207, + 10209, + 10211, + 10213, + 10215, + 10217, + 10219, + 10221, + 10223, + 10225, + 10227, + 10229, + 10231, + 10233, + 10235, + 10237, + 10239, + 10241, + 10243, + 10245, + 10247, + 10249, + 10251, + 10253, + 10255, + 10257, + 10259, + 10261, + 10263, + 10265, + 10267, + 10269, + 10271, + 10273, + 10275, + 10277, + 10279, + 12022, + 12024, + 12026, + 12028, + 12030, + 12032, + 12034, + 12036, + 12038, + 12040, + 12042, + 12044, + 12046, + 12048, + 12050, + 12052, + 12054, + 12084, + 12112, + 12129, + 12131, + 12160, + 12163, + 12165, + 12171, + 12180, + 12543, + 12545, + 12547, + 12549, + 12551, + 12553, + 12555, + 12557, + 12559, + 12561, + 12563, + 12565, + 12580, + 12583, + 12586, + 12589, + 12591, + 19775, + 19777, + 19779, + 19781, + 19815, + 19827, + 19832, + 19834, + 19841, + 19843, + 19845, + 19849, + 19851, + 19861, + 19863, + 19865, + 19867, + 19869, + 19871, + 19873, + 19875, + 19877, + 19879, + 19881 + ], + "pigeon cage": [ + 424, + 425 + ], + "priest gown": [ + 426, + 428 + ], + "karamjan rum": [ + 431, + 3164, + 3165 + ], + "chest key": [ + 432, + 709, + 2404, + 4273 + ], + "scorpion cage": [ + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463 + ], + "broken pickaxe": [ + 468, + 470, + 472, + 474, + 476, + 478, + 11923, + 12594 + ], + "axe handle": [ + 492, + 7952 + ], + "broken axe": [ + 494, + 496, + 498, + 500, + 502, + 504, + 506, + 6741 + ], + "bones": [ + 526, + 2530, + 3187 + ], + "monks robe": [ + 542, + 20202, + 23306 + ], + "monks robe top": [ + 544, + 20199, + 23303 + ], + "shade robe": [ + 548, + 10634 + ], + "ghostspeak amulet": [ + 552, + 4250 + ], + "fire rune": [ + 554, + 6428, + 7554, + 9699, + 11686, + 11718 + ], + "water rune": [ + 555, + 6424, + 7556, + 9691, + 11687, + 11716 + ], + "air rune": [ + 556, + 6422, + 7558, + 9693, + 11688, + 11715 + ], + "earth rune": [ + 557, + 6426, + 9695, + 11689, + 11717 + ], + "mind rune": [ + 558, + 6436, + 9697, + 11690 + ], + "body rune": [ + 559, + 6438, + 11691 + ], + "death rune": [ + 560, + 6432, + 11692, + 11713 + ], + "nature rune": [ + 561, + 11693 + ], + "chaos rune": [ + 562, + 6430, + 7560, + 11694, + 11712 + ], + "law rune": [ + 563, + 6434, + 11695 + ], + "cosmic rune": [ + 564, + 11696 + ], + "blood rune": [ + 565, + 11697, + 11714 + ], + "soul rune": [ + 566, + 11698 + ], + "blue wizard robe": [ + 577, + 7390, + 7392 + ], + "blue wizard hat": [ + 579, + 7394, + 7396 + ], + "bailing bucket": [ + 583, + 585 + ], + "tinderbox": [ + 590, + 7156 + ], + "torch": [ + 595, + 8987, + 9665 + ], + "bronze fire arrow": [ + 598, + 942 + ], + "bone key": [ + 605, + 4272 + ], + "locating crystal": [ + 611, + 612, + 613, + 614, + 615 + ], + "coins": [ + 617, + 995, + 6964, + 8890 + ], + "paramaya ticket": [ + 619, + 620 + ], + "blue hat": [ + 660, + 740 + ], + "panning tray": [ + 677, + 678, + 679 + ], + "broken glass": [ + 690, + 1469 + ], + "level certificate": [ + 691, + 692, + 693 + ], + "stone tablet": [ + 699, + 22991 + ], + "mixed chemicals": [ + 705, + 706 + ], + "vase": [ + 710, + 3734 + ], + "cup of tea": [ + 712, + 1978, + 4242, + 4243, + 4245, + 4246, + 4838, + 7730, + 7731, + 7733, + 7734, + 7736, + 7737 + ], + "clue scroll": [ + 713, + 2677, + 2678, + 2679, + 2680, + 2681, + 2682, + 2683, + 2684, + 2685, + 2686, + 2687, + 2688, + 2689, + 2690, + 2691, + 2692, + 2693, + 2694, + 2695, + 2696, + 2697, + 2698, + 2699, + 2700, + 2701, + 2702, + 2703, + 2704, + 2705, + 2706, + 2707, + 2708, + 2709, + 2710, + 2711, + 2712, + 2713, + 2716, + 2719, + 2722, + 2723, + 2725, + 2727, + 2729, + 2731, + 2733, + 2735, + 2737, + 2739, + 2741, + 2743, + 2745, + 2747, + 2773, + 2774, + 2776, + 2778, + 2780, + 2782, + 2783, + 2785, + 2786, + 2788, + 2790, + 2792, + 2793, + 2794, + 2796, + 2797, + 2799, + 2801, + 2803, + 2805, + 2807, + 2809, + 2811, + 2813, + 2815, + 2817, + 2819, + 2821, + 2823, + 2825, + 2827, + 2829, + 2831, + 2833, + 2835, + 2837, + 2839, + 2841, + 2843, + 2845, + 2847, + 2848, + 2849, + 2851, + 2853, + 2855, + 2856, + 2857, + 2858, + 3490, + 3491, + 3492, + 3493, + 3494, + 3495, + 3496, + 3497, + 3498, + 3499, + 3500, + 3501, + 3502, + 3503, + 3504, + 3505, + 3506, + 3507, + 3508, + 3509, + 3510, + 3512, + 3513, + 3514, + 3515, + 3516, + 3518, + 3520, + 3522, + 3524, + 3525, + 3526, + 3528, + 3530, + 3532, + 3534, + 3536, + 3538, + 3540, + 3542, + 3544, + 3546, + 3548, + 3550, + 3552, + 3554, + 3556, + 3558, + 3560, + 3562, + 3564, + 3566, + 3568, + 3570, + 3572, + 3573, + 3574, + 3575, + 3577, + 3579, + 3580, + 3582, + 3584, + 3586, + 3588, + 3590, + 3592, + 3594, + 3596, + 3598, + 3599, + 3601, + 3602, + 3604, + 3605, + 3607, + 3609, + 3610, + 3611, + 3612, + 3613, + 3614, + 3615, + 3616, + 3617, + 3618, + 7236, + 7238, + 7239, + 7241, + 7243, + 7245, + 7247, + 7248, + 7249, + 7250, + 7251, + 7252, + 7253, + 7254, + 7255, + 7256, + 7258, + 7260, + 7262, + 7264, + 7266, + 7268, + 7270, + 7272, + 7274, + 7276, + 7278, + 7280, + 7282, + 7284, + 7286, + 7288, + 7290, + 7292, + 7294, + 7296, + 7298, + 7300, + 7301, + 7303, + 7304, + 7305, + 7307, + 7309, + 7311, + 7313, + 7315, + 7317, + 10180, + 10182, + 10184, + 10186, + 10188, + 10190, + 10192, + 10194, + 10196, + 10198, + 10200, + 10202, + 10204, + 10206, + 10208, + 10210, + 10212, + 10214, + 10216, + 10218, + 10220, + 10222, + 10224, + 10226, + 10228, + 10230, + 10232, + 10234, + 10236, + 10238, + 10240, + 10242, + 10244, + 10246, + 10248, + 10250, + 10252, + 10254, + 10256, + 10258, + 10260, + 10262, + 10264, + 10266, + 10268, + 10270, + 10272, + 10274, + 10276, + 10278, + 12021, + 12023, + 12025, + 12027, + 12029, + 12031, + 12033, + 12035, + 12037, + 12039, + 12041, + 12043, + 12045, + 12047, + 12049, + 12051, + 12053, + 12055, + 12057, + 12059, + 12061, + 12063, + 12065, + 12067, + 12069, + 12071, + 12073, + 12074, + 12075, + 12076, + 12077, + 12078, + 12079, + 12080, + 12081, + 12082, + 12083, + 12085, + 12086, + 12087, + 12088, + 12089, + 12090, + 12091, + 12092, + 12093, + 12094, + 12095, + 12096, + 12097, + 12098, + 12099, + 12100, + 12101, + 12102, + 12103, + 12104, + 12105, + 12106, + 12107, + 12108, + 12109, + 12110, + 12111, + 12113, + 12114, + 12115, + 12116, + 12117, + 12118, + 12119, + 12120, + 12121, + 12122, + 12123, + 12124, + 12125, + 12126, + 12127, + 12130, + 12132, + 12133, + 12134, + 12135, + 12136, + 12137, + 12138, + 12140, + 12141, + 12142, + 12143, + 12144, + 12145, + 12146, + 12147, + 12148, + 12149, + 12150, + 12151, + 12152, + 12153, + 12154, + 12155, + 12156, + 12157, + 12158, + 12159, + 12162, + 12164, + 12166, + 12167, + 12168, + 12169, + 12170, + 12172, + 12173, + 12174, + 12175, + 12176, + 12177, + 12178, + 12179, + 12181, + 12182, + 12183, + 12184, + 12185, + 12186, + 12187, + 12188, + 12189, + 12190, + 12191, + 12192, + 12542, + 12544, + 12546, + 12548, + 12550, + 12552, + 12554, + 12556, + 12558, + 12560, + 12562, + 12564, + 12566, + 12568, + 12570, + 12572, + 12574, + 12576, + 12578, + 12581, + 12584, + 12587, + 12590, + 19734, + 19736, + 19738, + 19740, + 19742, + 19744, + 19746, + 19748, + 19750, + 19752, + 19754, + 19756, + 19758, + 19760, + 19762, + 19764, + 19766, + 19768, + 19770, + 19772, + 19774, + 19776, + 19778, + 19780, + 19782, + 19783, + 19784, + 19785, + 19786, + 19787, + 19788, + 19789, + 19790, + 19791, + 19792, + 19793, + 19794, + 19795, + 19796, + 19797, + 19798, + 19799, + 19800, + 19801, + 19802, + 19803, + 19804, + 19805, + 19806, + 19807, + 19808, + 19809, + 19810, + 19811, + 19813, + 19814, + 19816, + 19817, + 19818, + 19819, + 19820, + 19821, + 19822, + 19823, + 19824, + 19825, + 19826, + 19828, + 19829, + 19830, + 19831, + 19833, + 19835, + 19840, + 19842, + 19844, + 19846, + 19848, + 19850, + 19852, + 19853, + 19854, + 19856, + 19857, + 19858, + 19860, + 19862, + 19864, + 19866, + 19868, + 19870, + 19872, + 19874, + 19876, + 19878, + 19880, + 19882, + 19884, + 19886, + 19888, + 19890, + 19892, + 19894, + 19896, + 19898, + 19900, + 19902, + 19904, + 19906, + 19908, + 19910, + 21524, + 21525, + 21526, + 21527, + 22000, + 22001, + 23045, + 23046, + 23131, + 23133, + 23135, + 23136, + 23137, + 23138, + 23139, + 23140, + 23141, + 23142, + 23143, + 23144, + 23145, + 23146, + 23147, + 23148, + 23149, + 23150, + 23151, + 23152, + 23153, + 23154, + 23155, + 23156, + 23157, + 23158, + 23159, + 23160, + 23161, + 23162, + 23163, + 23164, + 23165, + 23166, + 23167, + 23168, + 23169, + 23170, + 23172, + 23174, + 23175, + 23176, + 23177, + 23178, + 23179, + 23180, + 23181, + 23182, + 23770, + 23814, + 23815, + 23816, + 23817, + 24253 + ], + "radimus notes": [ + 714, + 715 + ], + "scrawled note": [ + 717, + 19511 + ], + "golden bowl": [ + 723, + 724, + 725, + 726 + ], + "hollow reed": [ + 727, + 728 + ], + "yommi tree seeds": [ + 735, + 736 + ], + "heart crystal": [ + 744, + 745 + ], + "message": [ + 755, + 9633, + 9649, + 22475 + ], + "book": [ + 757, + 1509, + 6767 + ], + "falador shield": [ + 762, + 13117, + 13118, + 13119, + 13120 + ], + "broken shield": [ + 763, + 765 + ], + "coal bag": [ + 764, + 12019 + ], + "gem bag": [ + 766, + 12020 + ], + "phoenix crossbow": [ + 767, + 11165, + 11167 + ], + "certificate": [ + 769, + 3114 + ], + "ardougne cloak": [ + 770, + 13121, + 13122, + 13123, + 13124 + ], + "crest part": [ + 779, + 780, + 781 + ], + "twigs": [ + 789, + 790, + 791, + 792 + ], + "bronze dart": [ + 806, + 812, + 5628, + 5635 + ], + "iron dart": [ + 807, + 813, + 5629, + 5636 + ], + "steel dart": [ + 808, + 814, + 5630, + 5637 + ], + "mithril dart": [ + 809, + 815, + 5632, + 5639 + ], + "adamant dart": [ + 810, + 816, + 5633, + 5640 + ], + "rune dart": [ + 811, + 817, + 5634, + 5641 + ], + "bronze javelin": [ + 825, + 831, + 5642, + 5648 + ], + "iron javelin": [ + 826, + 832, + 5643, + 5649 + ], + "steel javelin": [ + 827, + 833, + 5644, + 5650 + ], + "mithril javelin": [ + 828, + 834, + 5645, + 5651 + ], + "adamant javelin": [ + 829, + 835, + 5646, + 5652 + ], + "rune javelin": [ + 830, + 836, + 5647, + 5653 + ], + "iron knife": [ + 863, + 871, + 5655, + 5662 + ], + "bronze knife": [ + 864, + 870, + 5654, + 5661 + ], + "steel knife": [ + 865, + 872, + 5656, + 5663 + ], + "mithril knife": [ + 866, + 873, + 5657, + 5664 + ], + "adamant knife": [ + 867, + 875, + 5659, + 5666 + ], + "rune knife": [ + 868, + 876, + 5660, + 5667 + ], + "black knife": [ + 869, + 874, + 5658, + 5665 + ], + "bronze bolts": [ + 877, + 878, + 6061, + 6062, + 9375 + ], + "opal bolts": [ + 879, + 9236 + ], + "pearl bolts": [ + 880, + 9238 + ], + "bronze arrow": [ + 882, + 883, + 5616, + 5622, + 11700 + ], + "iron arrow": [ + 884, + 885, + 5617, + 5623, + 11701 + ], + "steel arrow": [ + 886, + 887, + 5618, + 5624, + 11702 + ], + "mithril arrow": [ + 888, + 889, + 5619, + 5625, + 7552, + 11703 + ], + "adamant arrow": [ + 890, + 891, + 5620, + 5626, + 20388 + ], + "rune arrow": [ + 892, + 893, + 5621, + 5627, + 20600 + ], + "knife": [ + 946, + 5605 + ], + "rope": [ + 954, + 4498, + 7155, + 11046, + 20587 + ], + "flier": [ + 956, + 23670 + ], + "skull": [ + 964, + 965 + ], + "tile": [ + 966, + 5568 + ], + "rock": [ + 968, + 1480, + 1855, + 4043, + 4487, + 7533, + 9716, + 21250 + ], + "papyrus": [ + 970, + 972 + ], + "white apron": [ + 1005, + 7957 + ], + "blue skirt": [ + 1011, + 7386, + 7388 + ], + "black skirt": [ + 1015, + 12445, + 12447 + ], + "bunny ears": [ + 1037, + 10734 + ], + "blue partyhat": [ + 1042, + 2422 + ], + "cape of legends": [ + 1052, + 8284, + 10635 + ], + "leather boots": [ + 1061, + 6893 + ], + "iron platelegs": [ + 1067, + 12227, + 12237 + ], + "steel platelegs": [ + 1069, + 20172, + 20187 + ], + "mithril platelegs": [ + 1071, + 12279, + 12289 + ], + "adamant platelegs": [ + 1073, + 2601, + 2609, + 20416 + ], + "bronze platelegs": [ + 1075, + 12207, + 12217 + ], + "black platelegs": [ + 1077, + 2585, + 2593 + ], + "rune platelegs": [ + 1079, + 2617, + 2625, + 20422 + ], + "iron plateskirt": [ + 1081, + 12229, + 12239 + ], + "steel plateskirt": [ + 1083, + 20175, + 20190 + ], + "mithril plateskirt": [ + 1085, + 12285, + 12295 + ], + "bronze plateskirt": [ + 1087, + 12209, + 12219 + ], + "black plateskirt": [ + 1089, + 3472, + 3473 + ], + "adamant plateskirt": [ + 1091, + 3474, + 3475 + ], + "rune plateskirt": [ + 1093, + 3476, + 3477 + ], + "leather chaps": [ + 1095, + 23384 + ], + "studded chaps": [ + 1097, + 7366, + 7368 + ], + "green dhide chaps": [ + 1099, + 7378, + 7380 + ], + "iron platebody": [ + 1115, + 12225, + 12235 + ], + "bronze platebody": [ + 1117, + 12205, + 12215 + ], + "steel platebody": [ + 1119, + 20169, + 20184 + ], + "mithril platebody": [ + 1121, + 12277, + 12287 + ], + "adamant platebody": [ + 1123, + 2599, + 2607, + 10697, + 10698, + 20415, + 23392, + 23395, + 23398, + 23401, + 23404 + ], + "black platebody": [ + 1125, + 2583, + 2591, + 10690, + 10691, + 23366, + 23369, + 23372, + 23375, + 23378 + ], + "rune platebody": [ + 1127, + 2615, + 2623, + 10798, + 10800, + 20421, + 23209, + 23212, + 23215, + 23218, + 23221 + ], + "leather body": [ + 1129, + 23381 + ], + "studded body": [ + 1133, + 7362, + 7364, + 10680, + 10681 + ], + "green dhide body": [ + 1135, + 7370, + 7372 + ], + "adamant med helm": [ + 1145, + 6895 + ], + "dragon med helm": [ + 1149, + 6967 + ], + "iron helm": [ + 1153, + 12231, + 12241 + ], + "bronze helm": [ + 1155, + 12211, + 12221 + ], + "steel helm": [ + 1157, + 20178, + 20193 + ], + "mithril helm": [ + 1159, + 12283, + 12293 + ], + "adamant helm": [ + 1161, + 2605, + 2613, + 10296, + 10298, + 10300, + 10302, + 10304, + 10709, + 10710, + 10711, + 10712, + 10713, + 20561 + ], + "rune helm": [ + 1163, + 2619, + 2627, + 10286, + 10288, + 10290, + 10292, + 10294, + 10704, + 10705, + 10706, + 10707, + 10708 + ], + "black helm": [ + 1165, + 2587, + 2595, + 10306, + 10308, + 10310, + 10312, + 10314, + 10699, + 10700, + 10701, + 10702, + 10703 + ], + "wooden shield": [ + 1171, + 7676, + 20166 + ], + "dragon sq shield": [ + 1187, + 12418 + ], + "bronze kiteshield": [ + 1189, + 12213, + 12223 + ], + "iron kiteshield": [ + 1191, + 12233, + 12243 + ], + "steel kiteshield": [ + 1193, + 8746, + 8748, + 8750, + 8752, + 8754, + 8756, + 8758, + 8760, + 8762, + 8764, + 8766, + 8768, + 8770, + 8772, + 8774, + 8776, + 20181, + 20196 + ], + "black kiteshield": [ + 1195, + 2589, + 2597 + ], + "mithril kiteshield": [ + 1197, + 12281, + 12291 + ], + "adamant kiteshield": [ + 1199, + 2603, + 2611, + 6894, + 22127, + 22129, + 22131, + 22133, + 22135, + 22137, + 22139, + 22141, + 22143, + 22145, + 22147, + 22149, + 22151, + 22153, + 22155, + 22157 + ], + "rune kiteshield": [ + 1201, + 2621, + 2629, + 8714, + 8716, + 8718, + 8720, + 8722, + 8724, + 8726, + 8728, + 8730, + 8732, + 8734, + 8736, + 8738, + 8740, + 8742, + 8744 + ], + "iron dagger": [ + 1203, + 1219, + 5668, + 5686 + ], + "bronze dagger": [ + 1205, + 1221, + 5670, + 5688 + ], + "steel dagger": [ + 1207, + 1223, + 5672, + 5690 + ], + "mithril dagger": [ + 1209, + 1225, + 5674, + 5692 + ], + "adamant dagger": [ + 1211, + 1227, + 5676, + 5694 + ], + "rune dagger": [ + 1213, + 1229, + 5678, + 5696 + ], + "dragon dagger": [ + 1215, + 1231, + 5680, + 5698, + 20407 + ], + "black dagger": [ + 1217, + 1233, + 5682, + 5700 + ], + "bronze spear": [ + 1237, + 1251, + 3170, + 5704, + 5718 + ], + "iron spear": [ + 1239, + 1253, + 3171, + 5706, + 5720 + ], + "steel spear": [ + 1241, + 1255, + 3172, + 5708, + 5722 + ], + "mithril spear": [ + 1243, + 1257, + 3173, + 5710, + 5724 + ], + "adamant spear": [ + 1245, + 1259, + 3174, + 5712, + 5726 + ], + "rune spear": [ + 1247, + 1261, + 3175, + 5714, + 5728 + ], + "dragon spear": [ + 1249, + 1263, + 3176, + 5716, + 5730 + ], + "iron pickaxe": [ + 1267, + 11721 + ], + "mithril pickaxe": [ + 1273, + 11720 + ], + "rune pickaxe": [ + 1275, + 11719 + ], + "rune longsword": [ + 1303, + 6897 + ], + "runeh sword": [ + 1319, + 20555 + ], + "rune scimitar": [ + 1333, + 20402, + 23330, + 23332, + 23334 + ], + "rune battleaxe": [ + 1373, + 20552 + ], + "ibans staff": [ + 1409, + 1410, + 12658 + ], + "scythe": [ + 1419, + 10735 + ], + "amulet of accuracy": [ + 1478, + 20584 + ], + "orb of light": [ + 1481, + 1482, + 1483, + 1484, + 23812 + ], + "paladins badge": [ + 1488, + 1489, + 1490 + ], + "logs": [ + 1511, + 2511 + ], + "map part": [ + 1535, + 1536, + 1537 + ], + "antidragon shield": [ + 1540, + 8282, + 11710 + ], + "pet kitten": [ + 1555, + 1556, + 1557, + 1558, + 1559, + 1560 + ], + "pet cat": [ + 1561, + 1562, + 1563, + 1564, + 1565, + 1566, + 1567, + 1568, + 1569, + 1570, + 1571, + 1572 + ], + "emerald": [ + 1605, + 6896 + ], + "dragonstone": [ + 1615, + 6903 + ], + "gold amulet": [ + 1673, + 1692 + ], + "sapphire amulet": [ + 1675, + 1694 + ], + "emerald amulet": [ + 1677, + 1696 + ], + "ruby amulet": [ + 1679, + 1698 + ], + "diamond amulet": [ + 1681, + 1700 + ], + "dragonstone amulet": [ + 1683, + 1702 + ], + "karamja gloves": [ + 1686, + 11136, + 11138, + 11140, + 13103 + ], + "amulet of glory": [ + 1704, + 1706, + 1708, + 1710, + 1712, + 8283, + 10354, + 10356, + 10358, + 10360, + 10362, + 10719, + 11964, + 11966, + 11976, + 11978, + 20586 + ], + "holy symbol": [ + 1718, + 4682 + ], + "unholy symbol": [ + 1724, + 4683 + ], + "amulet of magic": [ + 1727, + 10366, + 10738 + ], + "amulet of defence": [ + 1729, + 23309 + ], + "amulet of power": [ + 1731, + 20585, + 23354 + ], + "shears": [ + 1735, + 5603 + ], + "chisel": [ + 1755, + 5601 + ], + "molten glass": [ + 1775, + 24260 + ], + "woad leaf": [ + 1793, + 5738 + ], + "bronze wire": [ + 1794, + 5602 + ], + "silver necklace": [ + 1796, + 1797 + ], + "silver cup": [ + 1798, + 1799 + ], + "silver bottle": [ + 1800, + 1801 + ], + "silver book": [ + 1802, + 1803 + ], + "silver needle": [ + 1804, + 1805 + ], + "silver pot": [ + 1806, + 1807, + 4658, + 4660, + 4662, + 4664, + 4666 + ], + "criminals thread": [ + 1808, + 1809, + 1810 + ], + "criminals dagger": [ + 1813, + 1814 + ], + "waterskin": [ + 1823, + 1825, + 1827, + 1829, + 1831 + ], + "barrel": [ + 1841, + 3216 + ], + "ugthanki kebab": [ + 1883, + 1885 + ], + "cake": [ + 1891, + 1893 + ], + "chocolate cake": [ + 1897, + 1899 + ], + "asgarnian ale": [ + 1905, + 5739, + 5779, + 5781, + 5783, + 5785, + 5859, + 5861, + 5863, + 5865, + 7744, + 8241, + 8520 + ], + "greenmans ale": [ + 1909, + 5743, + 5787, + 5789, + 5791, + 5793, + 5867, + 5869, + 5871, + 5873, + 7746, + 8242, + 8522 + ], + "dragon bitter": [ + 1911, + 5745, + 5803, + 5805, + 5807, + 5809, + 5883, + 5885, + 5887, + 5889, + 7748, + 8243, + 8524 + ], + "dwarven stout": [ + 1913, + 5747, + 5771, + 5773, + 5775, + 5777, + 5851, + 5853, + 5855, + 5857 + ], + "beer": [ + 1917, + 7740 + ], + "beer glass": [ + 1919, + 6123, + 7742 + ], + "bucket": [ + 1925, + 8986, + 9660 + ], + "bucket of water": [ + 1929, + 6712, + 9659 + ], + "pot of flour": [ + 1933, + 2516 + ], + "swamp paste": [ + 1941, + 22095 + ], + "grain": [ + 1947, + 5607 + ], + "easter egg": [ + 1961, + 7928, + 7929, + 7930, + 7931, + 7932, + 7933, + 11027, + 11028, + 11029, + 11030 + ], + "cabbage": [ + 1965, + 1967, + 22519, + 22520 + ], + "empty cup": [ + 1980, + 7728 + ], + "jug of bad wine": [ + 1991, + 1992 + ], + "unfermented wine": [ + 1995, + 1996 + ], + "incomplete stew": [ + 1997, + 1999 + ], + "unfinished cocktail": [ + 2042, + 2044, + 2046, + 2050, + 2052, + 2056, + 2058, + 2060, + 2062, + 2066, + 2068, + 2070, + 2072, + 2076, + 2078, + 2082, + 2086, + 2088, + 2090 + ], + "pineapple punch": [ + 2048, + 9512 + ], + "wizard blizzard": [ + 2054, + 9487, + 9489, + 9508 + ], + "blurberry special": [ + 2064, + 9520 + ], + "choc saturday": [ + 2074, + 9518 + ], + "short green guy": [ + 2080, + 9510 + ], + "fruit blast": [ + 2084, + 9514 + ], + "drunk dragon": [ + 2092, + 9516 + ], + "odd cocktail": [ + 2094, + 2096, + 2098, + 2100 + ], + "raw beef": [ + 2132, + 4287 + ], + "raw chicken": [ + 2138, + 4289 + ], + "cooked chicken": [ + 2140, + 4291 + ], + "cooked meat": [ + 2142, + 4293 + ], + "batta tin": [ + 2164, + 9522, + 9524 + ], + "unfinished bowl": [ + 2179, + 2181, + 2183, + 2189, + 2193, + 9560, + 9562, + 9564 + ], + "chocolate bomb": [ + 2185, + 9553 + ], + "tangled toads legs": [ + 2187, + 9551 + ], + "worm hole": [ + 2191, + 9547 + ], + "veg ball": [ + 2195, + 9549 + ], + "worm crunchies": [ + 2205, + 9542 + ], + "unfinished crunchy": [ + 2207, + 2211, + 2215, + 9578, + 9580, + 9582, + 9584 + ], + "chocchip crunchies": [ + 2209, + 9544 + ], + "spicy crunchies": [ + 2213, + 9540 + ], + "toad crunchies": [ + 2217, + 9538 + ], + "unfinished batta": [ + 2251, + 2257, + 2261, + 2263, + 2265, + 2267, + 2269, + 2271, + 2273, + 2275, + 2279, + 9479, + 9481, + 9484, + 9486 + ], + "worm batta": [ + 2253, + 9531 + ], + "toad batta": [ + 2255, + 9529 + ], + "cheesetom batta": [ + 2259, + 9535 + ], + "fruit batta": [ + 2277, + 9527 + ], + "vegetable batta": [ + 2281, + 9533 + ], + "plain pizza": [ + 2289, + 2291 + ], + "meat pizza": [ + 2293, + 2295 + ], + "anchovy pizza": [ + 2297, + 2299 + ], + "pineapple pizza": [ + 2301, + 2303 + ], + "redberry pie": [ + 2325, + 2333 + ], + "meat pie": [ + 2327, + 2331 + ], + "palm leaf": [ + 2339, + 2340 + ], + "relic part": [ + 2373, + 2374, + 2375 + ], + "crystal": [ + 2380, + 2381, + 2382, + 2383, + 23802 + ], + "silverlight key": [ + 2399, + 2400, + 2401 + ], + "silverlight": [ + 2402, + 6745, + 8279 + ], + "diary": [ + 2408, + 3395, + 3846 + ], + "door key": [ + 2409, + 9654 + ], + "magnet": [ + 2410, + 3718, + 5604 + ], + "guthix cape": [ + 2413, + 10720 + ], + "bronze key": [ + 2418, + 5585, + 8867, + 19566 + ], + "wig": [ + 2419, + 2421 + ], + "vorkaths head": [ + 2425, + 21907, + 21912 + ], + "antifire potion": [ + 2452, + 2454, + 2456, + 2458 + ], + "red flowers": [ + 2462, + 8938 + ], + "blue flowers": [ + 2464, + 8936 + ], + "blue dhide chaps": [ + 2493, + 7382, + 7384, + 20418 + ], + "red dhide chaps": [ + 2495, + 12329, + 12333, + 20567 + ], + "black dhide chaps": [ + 2497, + 12383, + 12387, + 20424 + ], + "blue dhide body": [ + 2499, + 7374, + 7376, + 20417 + ], + "red dhide body": [ + 2501, + 12327, + 12331, + 20566 + ], + "black dhide body": [ + 2503, + 12381, + 12385, + 20423 + ], + "dragon chainbody": [ + 2513, + 3140, + 12414, + 20428 + ], + "lamp": [ + 2528, + 6796 + ], + "dead orb": [ + 2529, + 17152 + ], + "iron fire arrow": [ + 2532, + 2533 + ], + "steel fire arrow": [ + 2534, + 2535 + ], + "mithril fire arrow": [ + 2536, + 2537 + ], + "adamant fire arrow": [ + 2538, + 2539 + ], + "rune fire arrow": [ + 2540, + 2541 + ], + "ring of dueling": [ + 2552, + 2554, + 2556, + 2558, + 2560, + 2562, + 2564, + 2566 + ], + "ring of wealth": [ + 2572, + 11980, + 11982, + 11984, + 11986, + 11988, + 12785, + 20786, + 20787, + 20788, + 20789, + 20790 + ], + "ranger boots": [ + 2577, + 10696 + ], + "wizard boots": [ + 2579, + 10689 + ], + "robin hood hat": [ + 2581, + 10796 + ], + "highwayman mask": [ + 2631, + 10692 + ], + "blue beret": [ + 2633, + 10693 + ], + "black beret": [ + 2635, + 10694 + ], + "white beret": [ + 2637, + 10695 + ], + "tan cavalier": [ + 2639, + 10802 + ], + "dark cavalier": [ + 2641, + 10804 + ], + "black cavalier": [ + 2643, + 10806 + ], + "red headband": [ + 2645, + 10768 + ], + "black headband": [ + 2647, + 10770 + ], + "brown headband": [ + 2649, + 10772 + ], + "pirates hat": [ + 2651, + 10774 + ], + "zamorak platebody": [ + 2653, + 10776 + ], + "guthix platebody": [ + 2669, + 10780 + ], + "puzzle box": [ + 2795, + 2798, + 2800, + 3565, + 3567, + 3569, + 3571, + 3576, + 3578, + 12161, + 12579, + 12582, + 12585, + 12588, + 19887, + 19891, + 19895, + 19897, + 19903, + 19911, + 20280, + 20281, + 20282, + 23171, + 23173, + 23417 + ], + "challenge scroll": [ + 2842, + 2844, + 2846, + 2850, + 2852, + 2854, + 7269, + 7271, + 7273, + 7275, + 7277, + 7279, + 7281, + 7283, + 7285, + 12056, + 12058, + 12060, + 12062, + 12064, + 12066, + 12068, + 12070, + 12072, + 12128, + 12139, + 12567, + 12569, + 12571, + 12573, + 12575, + 12577, + 19735, + 19737, + 19739, + 19741, + 19743, + 19745, + 19747, + 19749, + 19751, + 19753, + 19755, + 19757, + 19759, + 19763, + 19765, + 19767, + 19769, + 19771, + 19773, + 19847, + 19855, + 19859, + 19883, + 19885, + 19889, + 19893, + 19899, + 19901, + 19905, + 19907, + 19909, + 23132, + 23134 + ], + "ogre bellows": [ + 2871, + 2872, + 2873, + 2874 + ], + "cooked chompy": [ + 2878, + 7228 + ], + "a stone bowl": [ + 2888, + 2889 + ], + "iron key": [ + 2945, + 8869 + ], + "golden feather": [ + 2950, + 10175 + ], + "moonlight mead": [ + 2955, + 5749, + 5811, + 5813, + 5815, + 5817, + 5891, + 5893, + 5895, + 5897, + 7750 + ], + "druid pouch": [ + 2957, + 2958, + 7547 + ], + "silver sickle": [ + 2961, + 2963 + ], + "journal": [ + 2967, + 3845, + 4203, + 6755 + ], + "chompy bird hat": [ + 2978, + 2979, + 2980, + 2981, + 2982, + 2983, + 2984, + 2985, + 2986, + 2987, + 2988, + 2989, + 2990, + 2991, + 2992, + 2993, + 2994, + 2995 + ], + "energy potion": [ + 3008, + 3010, + 3012, + 3014 + ], + "super energy": [ + 3016, + 3018, + 3020, + 3022, + 20548, + 20549, + 20550, + 20551 + ], + "super restore": [ + 3024, + 3026, + 3028, + 3030, + 23567, + 23569, + 23571, + 23573 + ], + "agility potion": [ + 3032, + 3034, + 3036, + 3038 + ], + "magic potion": [ + 3040, + 3042, + 3044, + 3046 + ], + "lava battlestaff": [ + 3053, + 21198 + ], + "mystic lava staff": [ + 3054, + 21200 + ], + "mime mask": [ + 3057, + 10629 + ], + "black dart": [ + 3093, + 3094, + 5631, + 5638 + ], + "climbing boots": [ + 3105, + 20578, + 23413 + ], + "stone ball": [ + 3109, + 3110, + 3111, + 3112, + 3113 + ], + "pasty jogre bones": [ + 3128, + 3129, + 3131, + 3132 + ], + "marinated j bones": [ + 3130, + 3133 + ], + "prison key": [ + 3135, + 6966 + ], + "cell key": [ + 3136, + 3137 + ], + "cooked karambwan": [ + 3144, + 3147, + 23533 + ], + "karambwan paste": [ + 3152, + 3153, + 3154 + ], + "karambwanji paste": [ + 3155, + 3156 + ], + "karambwan vessel": [ + 3157, + 3159 + ], + "monkey bones": [ + 3179, + 3180, + 3181, + 3182, + 3183, + 3185, + 3186 + ], + "barrel bomb": [ + 3218, + 3219 + ], + "naphtha mix": [ + 3222, + 3223 + ], + "symbol": [ + 3231, + 3233, + 3235, + 3237 + ], + "goutweed": [ + 3261, + 4182 + ], + "myre snelm": [ + 3327, + 3337 + ], + "bloodntar snelm": [ + 3329, + 3339 + ], + "ochre snelm": [ + 3331, + 3341 + ], + "bruise blue snelm": [ + 3333, + 3343 + ], + "blamish myre shell": [ + 3345, + 3355 + ], + "blamish red shell": [ + 3347, + 3357 + ], + "blamish ochre shell": [ + 3349, + 3359 + ], + "blamish blue shell": [ + 3351, + 3361 + ], + "splitbark helm": [ + 3385, + 10606, + 20568 + ], + "unfinished potion": [ + 3406, + 4840, + 22408 + ], + "serum": [ + 3408, + 3410, + 3412, + 3414, + 3416, + 3417, + 3418, + 3419 + ], + "olive oil": [ + 3422, + 3424, + 3426, + 3428 + ], + "sacred oil": [ + 3430, + 3432, + 3434, + 3436 + ], + "gilded platebody": [ + 3481, + 10782 + ], + "shoe": [ + 3680, + 3681, + 3682, + 3683, + 3684, + 3685 + ], + "enchanted lyre": [ + 3690, + 3691, + 6125, + 6126, + 6127, + 13079, + 23458 + ], + "branch": [ + 3692, + 7773 + ], + "hunters talisman": [ + 3696, + 3697 + ], + "promissory note": [ + 3709, + 21870 + ], + "keg of beer": [ + 3711, + 3801 + ], + "red disk": [ + 3715, + 3716, + 3743 + ], + "full bucket": [ + 3722, + 4693 + ], + "sealed vase": [ + 3738, + 3739, + 3740 + ], + "archer helm": [ + 3749, + 20572 + ], + "warrior helm": [ + 3753, + 20571 + ], + "farseer helm": [ + 3755, + 20573 + ], + "saradomin page": [ + 3827, + 3828, + 3829, + 3830 + ], + "zamorak page": [ + 3831, + 3832, + 3833, + 3834 + ], + "guthix page": [ + 3835, + 3836, + 3837, + 3838 + ], + "damaged book": [ + 3839, + 3841, + 3843, + 12607, + 12609, + 12611 + ], + "games necklace": [ + 3853, + 3855, + 3857, + 3859, + 3861, + 3863, + 3865, + 3867 + ], + "board game piece": [ + 3869, + 3870, + 3871, + 3872, + 3873, + 3874, + 3875, + 3876, + 3877, + 3878, + 3879, + 3880, + 3881, + 3882, + 3883, + 3884, + 3885, + 3886, + 3887, + 3888, + 3889, + 3890, + 3891, + 3892, + 7096, + 7097, + 7098, + 7099, + 7100, + 7101, + 7102, + 7103, + 7104, + 7105, + 7106, + 7107 + ], + "stool": [ + 3893, + 5732 + ], + "wilderness sword": [ + 3981, + 13108, + 13109, + 13110, + 13111 + ], + "western banner": [ + 3983, + 13141, + 13142, + 13143, + 13144 + ], + "eye of gnome": [ + 4008, + 4009 + ], + "mspeak amulet": [ + 4021, + 4022 + ], + "ninja monkey greegree": [ + 4024, + 4025 + ], + "zombie monkey greegree": [ + 4029, + 4030 + ], + "monkey": [ + 4033, + 7503, + 8942, + 19556 + ], + "saradomin banner": [ + 4037, + 11891 + ], + "zamorak banner": [ + 4039, + 11892 + ], + "hooded cloak": [ + 4041, + 4042 + ], + "explosive potion": [ + 4045, + 23818 + ], + "decorative sword": [ + 4068, + 4503, + 4508, + 20483, + 24157 + ], + "decorative armour": [ + 4069, + 4070, + 4504, + 4505, + 4509, + 4510, + 10610, + 11893, + 11894, + 11895, + 11896, + 11897, + 11898, + 11899, + 11900, + 11901, + 20485, + 20487, + 20493, + 20495, + 20497, + 20499, + 20501, + 20503, + 20505, + 24158, + 24159, + 24162, + 24163, + 24164, + 24165, + 24166, + 24167, + 24168 + ], + "decorative helm": [ + 4071, + 4506, + 4511, + 20489, + 24160 + ], + "decorative shield": [ + 4072, + 4507, + 4512, + 20491, + 24161 + ], + "yoyo": [ + 4079, + 10733 + ], + "salve amulet": [ + 4081, + 10588, + 12017, + 12018 + ], + "sled": [ + 4083, + 4084 + ], + "dragon platelegs": [ + 4087, + 4180, + 12415, + 20429 + ], + "mystic hat": [ + 4089, + 4099, + 4109, + 10601, + 10602, + 10603, + 20562, + 23047 + ], + "mystic robe top": [ + 4091, + 4101, + 4111, + 20425, + 23050 + ], + "mystic robe bottom": [ + 4093, + 4103, + 4113, + 20426, + 23053 + ], + "mystic gloves": [ + 4095, + 4105, + 4115, + 23056 + ], + "mystic boots": [ + 4097, + 4107, + 4117, + 20579, + 23059 + ], + "crawling hand": [ + 4133, + 7975, + 8260 + ], + "broad arrows": [ + 4150, + 4160 + ], + "abyssal whip": [ + 4151, + 4178, + 12773, + 12774, + 20405 + ], + "granite maul": [ + 4153, + 12848, + 20557, + 24225, + 24227 + ], + "leafbladed spear": [ + 4158, + 4159 + ], + "slayers staff": [ + 4170, + 21255 + ], + "stick": [ + 4179, + 9702 + ], + "extended brush": [ + 4191, + 4192, + 4193 + ], + "decapitated head": [ + 4197, + 4198, + 10842 + ], + "ring of charos": [ + 4202, + 6465 + ], + "letter": [ + 4204, + 4615, + 6121, + 6756, + 6757, + 7966, + 21774 + ], + "consecration seed": [ + 4205, + 4206 + ], + "crystal bow": [ + 4212, + 4213, + 4214, + 4215, + 4216, + 4217, + 4218, + 4219, + 4220, + 4221, + 4222, + 4223, + 11748, + 11749, + 11750, + 11751, + 11752, + 11753, + 11754, + 11755, + 11756, + 11757, + 11758, + 16888, + 16889, + 23901, + 23902, + 23903, + 23983, + 23985, + 24123 + ], + "crystal shield": [ + 4224, + 4225, + 4226, + 4227, + 4228, + 4229, + 4230, + 4231, + 4232, + 4233, + 4234, + 4235, + 11759, + 11760, + 11761, + 11762, + 11763, + 11764, + 11765, + 11766, + 11767, + 11768, + 11769, + 16890, + 16891, + 23991, + 23993, + 24127 + ], + "nettle tea": [ + 4239, + 4240 + ], + "porcelain cup": [ + 4244, + 7732, + 7735 + ], + "ectophial": [ + 4251, + 4252 + ], + "model ship": [ + 4253, + 4254 + ], + "bonemeal": [ + 4255, + 4256, + 4257, + 4258, + 4259, + 4260, + 4261, + 4262, + 4263, + 4264, + 4265, + 4266, + 4267, + 4268, + 4269, + 4270, + 4271, + 4852, + 4853, + 4854, + 4855, + 5615, + 6728, + 6810, + 11922, + 22116, + 22754, + 22756, + 22758 + ], + "map scrap": [ + 4274, + 4275, + 4276 + ], + "bedsheet": [ + 4284, + 4285 + ], + "ham shirt": [ + 4298, + 11274 + ], + "teamcape": [ + 4315, + 4317, + 4319, + 4321, + 4323, + 4325, + 4327, + 4329, + 4331, + 4333, + 4335, + 4337, + 4339, + 4341, + 4343, + 4345, + 4347, + 4349, + 4351, + 4353, + 4355, + 4357, + 4359, + 4361, + 4363, + 4365, + 4367, + 4369, + 4371, + 4373, + 4375, + 4377, + 4379, + 4381, + 4383, + 4385, + 4387, + 4389, + 4391, + 4393, + 4395, + 4397, + 4399, + 4401, + 4403, + 4405, + 4407, + 4409, + 4411, + 4413, + 10638 + ], + "guthix rest": [ + 4417, + 4419, + 4421, + 4423 + ], + "broken vane part": [ + 4429, + 4431, + 4433 + ], + "antique lamp": [ + 4447, + 6543, + 7498, + 11137, + 11139, + 11141, + 11185, + 11186, + 11187, + 11188, + 11189, + 11679, + 13145, + 13146, + 13147, + 13148, + 21262, + 21640, + 21641, + 21642, + 23072, + 23082 + ], + "herb tea mix": [ + 4464, + 4466, + 4468, + 4470, + 4472, + 4474, + 4476, + 4478, + 4480, + 4482 + ], + "pole": [ + 4494, + 4500 + ], + "castlewars hood": [ + 4513, + 4515 + ], + "castlewars cloak": [ + 4514, + 4516 + ], + "oil lamp": [ + 4522, + 4524 + ], + "candle lantern": [ + 4529, + 4531, + 4532, + 4534 + ], + "oil lantern": [ + 4537, + 4539 + ], + "bullseye lantern": [ + 4544, + 4546, + 4548, + 4550 + ], + "purple sweets": [ + 4561, + 10476 + ], + "rubber chicken": [ + 4566, + 10732, + 22666 + ], + "book page": [ + 4569, + 4570, + 4571 + ], + "pages": [ + 4572, + 4573 + ], + "schematic": [ + 4575, + 4578 + ], + "schematics": [ + 4576, + 4577 + ], + "cannon ball": [ + 4579, + 7119 + ], + "black spear": [ + 4580, + 4582, + 4584, + 5734, + 5736 + ], + "dragon plateskirt": [ + 4585, + 12416 + ], + "dragon scimitar": [ + 4587, + 20000, + 20406 + ], + "note": [ + 4597, + 4598, + 21715 + ], + "oak blackjack": [ + 4599, + 6408, + 6410 + ], + "willow blackjack": [ + 4600, + 6412, + 6414 + ], + "ugthanki dung": [ + 4601, + 4602 + ], + "snake basket": [ + 4606, + 4607 + ], + "statuette": [ + 4618, + 6785 + ], + "bandit": [ + 4625, + 6781, + 6782 + ], + "blessed pot": [ + 4659, + 4661, + 4663, + 4665, + 4667 + ], + "ancient staff": [ + 4675, + 20431 + ], + "catspeak amulet": [ + 4677, + 6544 + ], + "canopic jar": [ + 4678, + 4679, + 4680, + 4681 + ], + "gold leaf": [ + 4692, + 8784 + ], + "sapphire lantern": [ + 4700, + 4701, + 4702 + ], + "magic stone": [ + 4703, + 8788 + ], + "ahrims hood": [ + 4708, + 4856, + 4857, + 4858, + 4859, + 4860 + ], + "ahrims staff": [ + 4710, + 4862, + 4863, + 4864, + 4865, + 4866, + 23653 + ], + "ahrims robetop": [ + 4712, + 4868, + 4869, + 4870, + 4871, + 4872, + 20598 + ], + "ahrims robeskirt": [ + 4714, + 4874, + 4875, + 4876, + 4877, + 4878, + 20599 + ], + "dharoks helm": [ + 4716, + 4880, + 4881, + 4882, + 4883, + 4884, + 23639 + ], + "dharoks greataxe": [ + 4718, + 4886, + 4887, + 4888, + 4889, + 4890 + ], + "dharoks platebody": [ + 4720, + 4892, + 4893, + 4894, + 4895, + 4896 + ], + "dharoks platelegs": [ + 4722, + 4898, + 4899, + 4900, + 4901, + 4902, + 23633 + ], + "guthans helm": [ + 4724, + 4904, + 4905, + 4906, + 4907, + 4908, + 23638 + ], + "guthans warspear": [ + 4726, + 4910, + 4911, + 4912, + 4913, + 4914 + ], + "guthans platebody": [ + 4728, + 4916, + 4917, + 4918, + 4919, + 4920 + ], + "guthans chainskirt": [ + 4730, + 4922, + 4923, + 4924, + 4925, + 4926 + ], + "karils coif": [ + 4732, + 4928, + 4929, + 4930, + 4931, + 4932 + ], + "karils crossbow": [ + 4734, + 4934, + 4935, + 4936, + 4937, + 4938 + ], + "karils leathertop": [ + 4736, + 4940, + 4941, + 4942, + 4943, + 4944, + 23632 + ], + "karils leatherskirt": [ + 4738, + 4946, + 4947, + 4948, + 4949, + 4950 + ], + "torags helm": [ + 4745, + 4952, + 4953, + 4954, + 4955, + 4956, + 23637 + ], + "torags hammers": [ + 4747, + 4958, + 4959, + 4960, + 4961, + 4962 + ], + "torags platebody": [ + 4749, + 4964, + 4965, + 4966, + 4967, + 4968 + ], + "torags platelegs": [ + 4751, + 4970, + 4971, + 4972, + 4973, + 4974, + 23634 + ], + "veracs helm": [ + 4753, + 4976, + 4977, + 4978, + 4979, + 4980, + 23636 + ], + "veracs flail": [ + 4755, + 4982, + 4983, + 4984, + 4985, + 4986 + ], + "veracs brassard": [ + 4757, + 4988, + 4989, + 4990, + 4991, + 4992 + ], + "veracs plateskirt": [ + 4759, + 4994, + 4995, + 4996, + 4997, + 4998, + 23635 + ], + "sithik portrait": [ + 4814, + 4815 + ], + "ogre artefact": [ + 4818, + 21837 + ], + "relicyms balm": [ + 4842, + 4844, + 4846, + 4848 + ], + "mining helmet": [ + 5013, + 5014 + ], + "minecart ticket": [ + 5020, + 5021, + 5022, + 5023 + ], + "woven top": [ + 5024, + 5026, + 5028 + ], + "shirt": [ + 5030, + 5032, + 5034 + ], + "trousers": [ + 5036, + 5038, + 5040 + ], + "shorts": [ + 5042, + 5044, + 5046 + ], + "skirt": [ + 5048, + 5050, + 5052 + ], + "dwarf": [ + 5054, + 7500 + ], + "dwarven battleaxe": [ + 5056, + 5057, + 5058, + 5059, + 5060, + 5061 + ], + "bird nest": [ + 5070, + 5071, + 5072, + 5073, + 5074, + 5075, + 7413, + 13653, + 22798, + 22800 + ], + "birds egg": [ + 5076, + 5077, + 5078 + ], + "varrock armour": [ + 5087, + 13104, + 13105, + 13106, + 13107 + ], + "morytania legs": [ + 5093, + 13112, + 13113, + 13114, + 13115 + ], + "explorers ring": [ + 5095, + 13125, + 13126, + 13127, + 13128 + ], + "potato seed": [ + 5318, + 7548 + ], + "onion seed": [ + 5319, + 7550 + ], + "tomato seed": [ + 5322, + 7562 + ], + "watering can": [ + 5331, + 5333, + 5334, + 5335, + 5336, + 5337, + 5338, + 5339, + 5340, + 6797 + ], + "oak seedling": [ + 5358, + 5364 + ], + "willow seedling": [ + 5359, + 5365 + ], + "maple seedling": [ + 5360, + 5366 + ], + "yew seedling": [ + 5361, + 5367 + ], + "magic seedling": [ + 5362, + 5368 + ], + "spirit seedling": [ + 5363, + 5369 + ], + "apples": [ + 5378, + 5380, + 5382, + 5384, + 5386 + ], + "oranges": [ + 5388, + 5390, + 5392, + 5394, + 5396 + ], + "strawberries": [ + 5398, + 5400, + 5402, + 5404, + 5406 + ], + "bananas": [ + 5408, + 5410, + 5412, + 5414, + 5416 + ], + "empty sack": [ + 5418, + 10486, + 21873 + ], + "potatoes": [ + 5420, + 5422, + 5424, + 5426, + 5428, + 5430, + 5432, + 5434, + 5436, + 5438 + ], + "onions": [ + 5440, + 5442, + 5444, + 5446, + 5448, + 5450, + 5452, + 5454, + 5456, + 5458 + ], + "cabbages": [ + 5460, + 5462, + 5464, + 5466, + 5468, + 5470, + 5472, + 5474, + 5476, + 5478 + ], + "apple seedling": [ + 5480, + 5488 + ], + "banana seedling": [ + 5481, + 5489 + ], + "orange seedling": [ + 5482, + 5490 + ], + "curry seedling": [ + 5483, + 5491 + ], + "pineapple seedling": [ + 5484, + 5492 + ], + "papaya seedling": [ + 5485, + 5493 + ], + "palm seedling": [ + 5486, + 5494 + ], + "calquat seedling": [ + 5487, + 5495 + ], + "medium pouch": [ + 5510, + 5511 + ], + "large pouch": [ + 5512, + 5513, + 6819 + ], + "giant pouch": [ + 5514, + 5515 + ], + "scrying orb": [ + 5518, + 5519 + ], + "rogue mask": [ + 5554, + 10612 + ], + "gear": [ + 5562, + 5563, + 5564, + 5565, + 5566, + 5567 + ], + "tiles": [ + 5569, + 5570, + 5571 + ], + "desert amulet": [ + 5573, + 13133, + 13134, + 13135, + 13136 + ], + "initiate hauberk": [ + 5575, + 10619 + ], + "metal spade": [ + 5586, + 5587 + ], + "mixture": [ + 5589, + 5590, + 5591 + ], + "tin": [ + 5592, + 5593, + 5594, + 5595, + 5596, + 5597, + 5598, + 5599, + 5600 + ], + "hourglass": [ + 5610, + 12841 + ], + "poison dagger": [ + 5684, + 5702 + ], + "axemans folly": [ + 5751, + 5753, + 5819, + 5821, + 5823, + 5825, + 5899, + 5901, + 5903, + 5905 + ], + "chefs delight": [ + 5755, + 5757, + 5827, + 5829, + 5831, + 5833, + 5907, + 5909, + 5911, + 5913, + 7754, + 8244, + 8526 + ], + "slayers respite": [ + 5759, + 5761, + 5835, + 5837, + 5839, + 5841, + 5915, + 5917, + 5919, + 5921 + ], + "cider": [ + 5763, + 5843, + 5845, + 5847, + 5849, + 5923, + 5925, + 5927, + 5929, + 7752 + ], + "mind bomb": [ + 5795, + 5797, + 5799, + 5801, + 5875, + 5877, + 5879, + 5881 + ], + "antidote": [ + 5942, + 5943, + 5945, + 5947, + 5949, + 5951, + 5952, + 5954, + 5956, + 5958 + ], + "tomatoes": [ + 5960, + 5962, + 5964, + 5966, + 5968 + ], + "sweetcorn": [ + 5986, + 7088 + ], + "marigolds": [ + 6010, + 8214 + ], + "rosemary": [ + 6014, + 8210 + ], + "leaves": [ + 6020, + 6022, + 6024, + 6026, + 6028, + 6030 + ], + "plant cure": [ + 6036, + 6468 + ], + "hay sack": [ + 6057, + 6058 + ], + "spirit tree": [ + 6063, + 20635 + ], + "mourner top": [ + 6065, + 10621 + ], + "teleport crystal": [ + 6099, + 6100, + 6101, + 6102, + 13102, + 23904 + ], + "ghostly boots": [ + 6106, + 10607 + ], + "ghostly robe": [ + 6107, + 6108 + ], + "square stone": [ + 6119, + 6120 + ], + "rockshell helm": [ + 6128, + 10613 + ], + "spined helm": [ + 6131, + 10614 + ], + "skeletal helm": [ + 6137, + 10604 + ], + "raw pheasant": [ + 6178, + 6179, + 11704 + ], + "lederhosen top": [ + 6180, + 10633 + ], + "princess blouse": [ + 6186, + 10630 + ], + "frog mask": [ + 6188, + 10721 + ], + "raw fishlike thing": [ + 6200, + 6204 + ], + "fishlike thing": [ + 6202, + 6206 + ], + "broodoo shield": [ + 6215, + 6217, + 6219, + 6221, + 6223, + 6225, + 6227, + 6229, + 6231, + 6233, + 6235, + 6237, + 6239, + 6241, + 6243, + 6245, + 6247, + 6249, + 6251, + 6253, + 6255, + 6257, + 6259, + 6261, + 6263, + 6265, + 6267, + 6269, + 6271, + 6273, + 6275, + 6277, + 6279 + ], + "snake hide": [ + 6287, + 7801 + ], + "spider on stick": [ + 6293, + 6297 + ], + "spider on shaft": [ + 6295, + 6299, + 6303 + ], + "snakeskin boots": [ + 6328, + 20580 + ], + "tribal mask": [ + 6335, + 6337, + 6339, + 10615, + 10616, + 10617 + ], + "tribal top": [ + 6341, + 6351, + 6361, + 6371 + ], + "villager robe": [ + 6343, + 6353, + 6363, + 6373 + ], + "villager hat": [ + 6345, + 6355, + 6365, + 6375 + ], + "villager armband": [ + 6347, + 6359, + 6369, + 6379 + ], + "villager sandals": [ + 6349, + 6357, + 6367, + 6377 + ], + "desert top": [ + 6384, + 6388 + ], + "maple blackjack": [ + 6416, + 6418, + 6420 + ], + "kandarin headgear": [ + 6450, + 13137, + 13138, + 13139, + 13140 + ], + "orchid seed": [ + 6458, + 6459 + ], + "white tree shoot": [ + 6461, + 6462, + 6463 + ], + "compost potion": [ + 6470, + 6472, + 6474, + 6476 + ], + "agility jump": [ + 6514, + 6518, + 11793 + ], + "agility balance": [ + 6515, + 6519 + ], + "agility contortion": [ + 6516, + 6520 + ], + "agility climb": [ + 6517, + 6521 + ], + "toktzxilak": [ + 6523, + 20554 + ], + "tzhaarketom": [ + 6528, + 23235 + ], + "present": [ + 6542, + 13346, + 13656 + ], + "lazy cat": [ + 6549, + 6550, + 6551, + 6552, + 6553, + 6554 + ], + "wily cat": [ + 6555, + 6556, + 6557, + 6558, + 6559, + 6560 + ], + "obsidian cape": [ + 6568, + 10636, + 20050 + ], + "fire cape": [ + 6570, + 10566, + 10637, + 20445, + 24223 + ], + "onyx amulet": [ + 6579, + 6581 + ], + "amulet of fury": [ + 6585, + 12436, + 23640 + ], + "white dagger": [ + 6591, + 6593, + 6595, + 6597 + ], + "white platebody": [ + 6617, + 10618 + ], + "hand mirror": [ + 6639, + 23775 + ], + "red crystal": [ + 6640, + 23776 + ], + "yellow crystal": [ + 6641, + 23777 + ], + "green crystal": [ + 6642, + 23778, + 23783 + ], + "cyan crystal": [ + 6643, + 22366, + 23779 + ], + "blue crystal": [ + 6644, + 23780 + ], + "magenta crystal": [ + 6645, + 23781 + ], + "fractured crystal": [ + 6646, + 6647, + 23784 + ], + "newly made crystal": [ + 6651, + 6652 + ], + "camo top": [ + 6654, + 6657, + 10632 + ], + "camo bottoms": [ + 6655, + 6658 + ], + "camo helmet": [ + 6656, + 6659 + ], + "fishing explosive": [ + 6660, + 6664 + ], + "fishbowl": [ + 6668, + 6669, + 6670, + 6671, + 6672 + ], + "guam in a box": [ + 6677, + 6678 + ], + "seaweed in a box": [ + 6679, + 6680 + ], + "saradomin brew": [ + 6685, + 6687, + 6689, + 6691, + 23575, + 23577, + 23579, + 23581 + ], + "slayer gloves": [ + 6708, + 6720 + ], + "karamthulhu": [ + 6716, + 6717 + ], + "zombie head": [ + 6722, + 10731, + 19912 + ], + "seers ring": [ + 6731, + 11770, + 23624 + ], + "archers ring": [ + 6733, + 11771 + ], + "warrior ring": [ + 6735, + 11772 + ], + "berserker ring": [ + 6737, + 11773, + 23595 + ], + "darklight": [ + 6746, + 8281 + ], + "scroll": [ + 6758, + 7968, + 9721, + 10485, + 10512 + ], + "rat pole": [ + 6773, + 6774, + 6775, + 6776, + 6777, + 6778, + 6779 + ], + "robe of elidinis": [ + 6786, + 6787 + ], + "torn robe": [ + 6788, + 6789 + ], + "orb": [ + 6821, + 6902 + ], + "star bauble": [ + 6822, + 6823, + 6824, + 6825, + 6826, + 6827 + ], + "box bauble": [ + 6828, + 6829, + 6830, + 6831, + 6832, + 6833 + ], + "diamond bauble": [ + 6834, + 6835, + 6836, + 6837, + 6838, + 6839 + ], + "tree bauble": [ + 6840, + 6841, + 6842, + 6843, + 6844, + 6845 + ], + "bell bauble": [ + 6846, + 6847, + 6848, + 6849, + 6850, + 6851 + ], + "puppet box": [ + 6852, + 6854 + ], + "bauble box": [ + 6853, + 6855 + ], + "bobble hat": [ + 6856, + 9815 + ], + "bobble scarf": [ + 6857, + 9816 + ], + "blue marionette": [ + 6865, + 6868, + 6875, + 6876, + 6877, + 6878, + 10730 + ], + "green marionette": [ + 6866, + 6869, + 6879, + 6880, + 6881, + 6882 + ], + "red marionette": [ + 6867, + 6870, + 6871, + 6872, + 6873, + 6874 + ], + "progress hat": [ + 6885, + 6886, + 6887 + ], + "mages book": [ + 6889, + 23652 + ], + "animals bones": [ + 6904, + 6905, + 6906, + 6907 + ], + "beginner wand": [ + 6908, + 20553 + ], + "apprentice wand": [ + 6910, + 20556 + ], + "master wand": [ + 6914, + 20560 + ], + "infinity top": [ + 6916, + 10605, + 20574 + ], + "infinity bottoms": [ + 6924, + 20575 + ], + "bones to peaches": [ + 6926, + 8015 + ], + "magical orb": [ + 6950, + 6951 + ], + "sandstone": [ + 6971, + 6973, + 6975, + 6977, + 6985, + 6986 + ], + "granite": [ + 6979, + 6981, + 6983 + ], + "stone head": [ + 6989, + 6990, + 6991, + 6992, + 7002 + ], + "fuse": [ + 7109, + 10884, + 10985, + 10986 + ], + "stripy pirate shirt": [ + 7110, + 7122, + 7128, + 7134 + ], + "pirate bandana": [ + 7112, + 7124, + 7130, + 7136, + 8949 + ], + "pirate leggings": [ + 7116, + 7126, + 7132, + 7138 + ], + "canister": [ + 7118, + 7149 + ], + "repair plank": [ + 7121, + 7148 + ], + "dragonh sword": [ + 7158, + 20559 + ], + "mud pie": [ + 7164, + 7166, + 7170 + ], + "garden pie": [ + 7172, + 7174, + 7178, + 7180 + ], + "fish pie": [ + 7182, + 7184, + 7188, + 7190 + ], + "admiral pie": [ + 7192, + 7194, + 7198 + ], + "wild pie": [ + 7202, + 7204, + 7208, + 7210 + ], + "summer pie": [ + 7212, + 7214, + 7218, + 7220 + ], + "red boater": [ + 7319, + 10758 + ], + "orange boater": [ + 7321, + 10760 + ], + "green boater": [ + 7323, + 10762 + ], + "blue boater": [ + 7325, + 10764 + ], + "black boater": [ + 7327, + 10766 + ], + "black shield": [ + 7332, + 7338, + 7344, + 7350, + 7356, + 10665, + 10668, + 10671, + 10674, + 10677 + ], + "adamant shield": [ + 7334, + 7340, + 7346, + 7352, + 7358, + 10666, + 10669, + 10672, + 10675, + 10678 + ], + "rune shield": [ + 7336, + 7342, + 7348, + 7354, + 7360, + 10667, + 10670, + 10673, + 10676, + 10679 + ], + "enchanted top": [ + 7399, + 10688 + ], + "magic secateurs": [ + 7409, + 11711 + ], + "queens secateurs": [ + 7410, + 9020 + ], + "fungicide spray": [ + 7421, + 7422, + 7423, + 7424, + 7425, + 7426, + 7427, + 7428, + 7429, + 7430, + 7431 + ], + "mithril gloves": [ + 7458, + 20581 + ], + "adamant gloves": [ + 7459, + 20582 + ], + "rune gloves": [ + 7460, + 20583 + ], + "barrows gloves": [ + 7462, + 23593 + ], + "cornflour": [ + 7463, + 7466 + ], + "brulee": [ + 7473, + 7474, + 7475 + ], + "red spice": [ + 7480, + 7481, + 7482, + 7483 + ], + "orange spice": [ + 7484, + 7485, + 7486, + 7487 + ], + "brown spice": [ + 7488, + 7489, + 7490, + 7491 + ], + "yellow spice": [ + 7492, + 7493, + 7494, + 7495 + ], + "dwarven rock cake": [ + 7509, + 7510 + ], + "crab meat": [ + 7518, + 7519 + ], + "cooked crab meat": [ + 7521, + 7523, + 7524, + 7525, + 7526 + ], + "diving apparatus": [ + 7535, + 21723 + ], + "balloon toad": [ + 7564, + 7565 + ], + "dummy": [ + 7586, + 11267, + 11268, + 11269, + 11271 + ], + "coffin": [ + 7587, + 7588, + 7589, + 7590, + 7591 + ], + "zombie shirt": [ + 7592, + 10631 + ], + "item": [ + 7597, + 7598, + 7599, + 7600, + 7601, + 7602, + 7603, + 7604, + 7605, + 7606, + 7607, + 7608, + 7609, + 7610, + 7611, + 7612, + 7613, + 7614, + 7615, + 7616, + 7617, + 7618 + ], + "bucket of rubble": [ + 7622, + 7624, + 7626 + ], + "silvthrill rod": [ + 7637, + 7638 + ], + "rod of ivandis": [ + 7639, + 7640, + 7641, + 7642, + 7643, + 7644, + 7645, + 7646, + 7647, + 7648 + ], + "guthix balance": [ + 7652, + 7654, + 7656, + 7658, + 7660, + 7662, + 7664, + 7666 + ], + "boxing gloves": [ + 7671, + 7673 + ], + "pot of tea": [ + 7692, + 7694, + 7696, + 7698, + 7704, + 7706, + 7708, + 7710, + 7716, + 7718, + 7720, + 7722 + ], + "teapot with leaves": [ + 7700, + 7712, + 7724 + ], + "teapot": [ + 7702, + 7714, + 7726 + ], + "toy soldier": [ + 7759, + 7761 + ], + "toy doll": [ + 7763, + 7765 + ], + "toy mouse": [ + 7767, + 7769 + ], + "reward token": [ + 7774, + 7775, + 7776, + 9474, + 10934, + 10935, + 10936, + 10942, + 10943, + 10944 + ], + "fishing tome": [ + 7779, + 7780, + 7781 + ], + "agility tome": [ + 7782, + 7783, + 7784 + ], + "thieving tome": [ + 7785, + 7786, + 7787 + ], + "slayer tome": [ + 7788, + 7789, + 7790 + ], + "mining tome": [ + 7791, + 7792, + 7793 + ], + "firemaking tome": [ + 7794, + 7795, + 7796 + ], + "woodcutting tome": [ + 7797, + 7798, + 7799 + ], + "goblin skull": [ + 7812, + 7814 + ], + "bone in vinegar": [ + 7813, + 7816, + 7819, + 7822, + 7825, + 7828, + 7831, + 7834, + 7837, + 7840, + 7843, + 7846, + 7849, + 7852, + 7855, + 7858, + 7861, + 7864, + 7867, + 7870, + 7873, + 7876, + 7879, + 7882, + 7885, + 7888, + 7891, + 7894, + 7897, + 7900, + 7903, + 7906, + 7909, + 7912, + 7915 + ], + "bear ribs": [ + 7815, + 7817 + ], + "ram skull": [ + 7818, + 7820 + ], + "unicorn bone": [ + 7821, + 7823 + ], + "giant rat bone": [ + 7824, + 7826 + ], + "giant bat wing": [ + 7827, + 7829 + ], + "wolf bone": [ + 7830, + 7832 + ], + "bat wing": [ + 7833, + 7835 + ], + "rat bone": [ + 7836, + 7838 + ], + "baby dragon bone": [ + 7839, + 7841 + ], + "ogre ribs": [ + 7842, + 7844 + ], + "jogre bone": [ + 7845, + 7847 + ], + "zogre bone": [ + 7848, + 7850 + ], + "mogre bone": [ + 7851, + 7853 + ], + "monkey paw": [ + 7854, + 7856 + ], + "dagannoth ribs": [ + 7857, + 7859 + ], + "snake spine": [ + 7860, + 7862 + ], + "zombie bone": [ + 7863, + 7865 + ], + "werewolf bone": [ + 7866, + 7868 + ], + "moss giant bone": [ + 7869, + 7871 + ], + "fire giant bone": [ + 7872, + 7874 + ], + "ice giant ribs": [ + 7875, + 7877 + ], + "terrorbird wing": [ + 7878, + 7880 + ], + "ghoul bone": [ + 7881, + 7883 + ], + "troll bone": [ + 7884, + 7886 + ], + "seagull wing": [ + 7887, + 7889 + ], + "undead cow ribs": [ + 7890, + 7892 + ], + "experiment bone": [ + 7893, + 7895 + ], + "rabbit bone": [ + 7896, + 7898 + ], + "basilisk bone": [ + 7899, + 7901 + ], + "desert lizard bone": [ + 7902, + 7904 + ], + "cave goblin skull": [ + 7905, + 7907 + ], + "big frog leg": [ + 7908, + 7910 + ], + "vulture wing": [ + 7911, + 7913 + ], + "jackal bone": [ + 7914, + 7916 + ], + "easter ring": [ + 7927, + 10729 + ], + "fresh monkfish": [ + 7942, + 7943 + ], + "monkfish": [ + 7946, + 20547 + ], + "burnt diary": [ + 7961, + 7962, + 7963, + 7964, + 7965 + ], + "cockatrice head": [ + 7976, + 8261 + ], + "basilisk head": [ + 7977, + 8262 + ], + "kurask head": [ + 7978, + 8263 + ], + "abyssal head": [ + 7979, + 8264 + ], + "kbd heads": [ + 7980, + 8265 + ], + "kq head": [ + 7981, + 8266, + 22671 + ], + "stuffed kq head": [ + 7988, + 22673 + ], + "small map": [ + 8004, + 8294 + ], + "medium map": [ + 8005, + 8295 + ], + "large map": [ + 8006, + 8296 + ], + "wooden bed": [ + 8031, + 8576 + ], + "oak bed": [ + 8032, + 8578 + ], + "large oak bed": [ + 8033, + 8580 + ], + "teak bed": [ + 8034, + 8582 + ], + "large teak bed": [ + 8035, + 8584 + ], + "shoe box": [ + 8038, + 8610 + ], + "oak drawers": [ + 8039, + 8612 + ], + "oak wardrobe": [ + 8040, + 8614, + 9829 + ], + "teak drawers": [ + 8041, + 8616 + ], + "teak wardrobe": [ + 8042, + 8618, + 9831 + ], + "mahogany wardrobe": [ + 8043, + 8620, + 9833 + ], + "gilded wardrobe": [ + 8044, + 8622, + 9834 + ], + "shaving stand": [ + 8045, + 8596 + ], + "oak shaving stand": [ + 8046, + 8598 + ], + "oak dresser": [ + 8047, + 8600 + ], + "teak dresser": [ + 8048, + 8602 + ], + "fancy teak dresser": [ + 8049, + 8604 + ], + "mahogany dresser": [ + 8050, + 8606 + ], + "gilded dresser": [ + 8051, + 8608 + ], + "oak clock": [ + 8052, + 8590 + ], + "teak clock": [ + 8053, + 8592 + ], + "gilded clock": [ + 8054, + 8594 + ], + "wooden bench": [ + 8108, + 8562 + ], + "oak bench": [ + 8109, + 8564 + ], + "carved oak bench": [ + 8110, + 8566 + ], + "teak dining bench": [ + 8111, + 8568 + ], + "carved teak bench": [ + 8112, + 8570 + ], + "mahogany bench": [ + 8113, + 8572 + ], + "gilded bench": [ + 8114, + 8574 + ], + "wood dining table": [ + 8115, + 8548 + ], + "oak dining table": [ + 8116, + 8550 + ], + "carved oak table": [ + 8117, + 8552 + ], + "teak table": [ + 8118, + 8554 + ], + "carved teak table": [ + 8119, + 8556 + ], + "mahogany table": [ + 8120, + 8558 + ], + "opulent table": [ + 8121, + 8560 + ], + "mahogany chest": [ + 8151, + 8167 + ], + "magical balance": [ + 8156, + 8157, + 8158 + ], + "fern": [ + 8182, + 8186 + ], + "thorny hedge": [ + 8203, + 8437 + ], + "nice hedge": [ + 8204, + 8439 + ], + "small box hedge": [ + 8205, + 8441 + ], + "topiary hedge": [ + 8206, + 8443 + ], + "fancy hedge": [ + 8207, + 8445 + ], + "tall fancy hedge": [ + 8208, + 8447 + ], + "tall box hedge": [ + 8209, + 8449 + ], + "wooden shelves": [ + 8223, + 8224, + 8225 + ], + "oak shelves": [ + 8226, + 8227 + ], + "teak shelves": [ + 8228, + 8229 + ], + "beer barrel": [ + 8239, + 8516 + ], + "cider barrel": [ + 8240, + 8518 + ], + "oak kitchen table": [ + 8247, + 8530 + ], + "teak kitchen table": [ + 8248, + 8532 + ], + "oak staircase": [ + 8249, + 8250, + 8251 + ], + "teak staircase": [ + 8252, + 8253, + 8254 + ], + "marble staircase": [ + 8255, + 8256, + 8257 + ], + "cw armour": [ + 8273, + 8274, + 8275 + ], + "rune case": [ + 8276, + 8277, + 8278 + ], + "steel cage": [ + 8299, + 8371 + ], + "spikes": [ + 8302, + 10561 + ], + "wooden chair": [ + 8310, + 8498 + ], + "rocking chair": [ + 8311, + 8500 + ], + "oak chair": [ + 8312, + 8502 + ], + "oak armchair": [ + 8313, + 8504 + ], + "teak armchair": [ + 8314, + 8506 + ], + "mahogany armchair": [ + 8315, + 8508 + ], + "oak bookcase": [ + 8320, + 8512 + ], + "mahogany bookcase": [ + 8321, + 8514 + ], + "oak lectern": [ + 8334, + 8534 + ], + "eagle lectern": [ + 8335, + 8536 + ], + "demon lectern": [ + 8336, + 8538 + ], + "teak eagle lectern": [ + 8337, + 8540 + ], + "teak demon lectern": [ + 8338, + 8542 + ], + "mahogany eagle": [ + 8339, + 8544 + ], + "mahogany demon": [ + 8340, + 8546 + ], + "globe": [ + 8341, + 8630 + ], + "ornamental globe": [ + 8342, + 8632 + ], + "lunar globe": [ + 8343, + 8634 + ], + "celestial globe": [ + 8344, + 8636 + ], + "armillary sphere": [ + 8345, + 8638 + ], + "small orrery": [ + 8346, + 8640 + ], + "large orrery": [ + 8347, + 8642 + ], + "wooden telescope": [ + 8348, + 8644 + ], + "teak telescope": [ + 8349, + 8646 + ], + "mahogany telescope": [ + 8350, + 8648 + ], + "crystal ball": [ + 8351, + 8624 + ], + "elemental sphere": [ + 8352, + 8626 + ], + "crystal of power": [ + 8353, + 8628 + ], + "trapdoor": [ + 8367, + 8368, + 8369, + 8372 + ], + "crafting table": [ + 8380, + 8381, + 8382, + 8383 + ], + "tool store": [ + 8384, + 8385, + 8386, + 8387, + 8388 + ], + "hall": [ + 8401, + 8402, + 8403, + 8404 + ], + "bagged plant": [ + 8431, + 8433, + 8435 + ], + "rune heraldic helm": [ + 8464, + 8466, + 8468, + 8470, + 8472, + 8474, + 8476, + 8478, + 8480, + 8482, + 8484, + 8486, + 8488, + 8490, + 8492, + 8494 + ], + "banner": [ + 8650, + 8652, + 8654, + 8656, + 8658, + 8660, + 8662, + 8664, + 8666, + 8668, + 8670, + 8672, + 8674, + 8676, + 8678, + 8680 + ], + "steel heraldic helm": [ + 8682, + 8684, + 8686, + 8688, + 8690, + 8692, + 8694, + 8696, + 8698, + 8700, + 8702, + 8704, + 8706, + 8708, + 8710, + 8712 + ], + "void knight top": [ + 8839, + 10611, + 20465, + 24177 + ], + "void knight robe": [ + 8840, + 20469, + 24179 + ], + "void knight mace": [ + 8841, + 20473, + 24181 + ], + "void knight gloves": [ + 8842, + 20475, + 24182 + ], + "bronze defender": [ + 8844, + 20449, + 24136 + ], + "iron defender": [ + 8845, + 20451, + 24137 + ], + "steel defender": [ + 8846, + 20453, + 24138 + ], + "black defender": [ + 8847, + 20455, + 24139 + ], + "mithril defender": [ + 8848, + 20457, + 24140 + ], + "adamant defender": [ + 8849, + 20459, + 24141 + ], + "rune defender": [ + 8850, + 20461, + 23230, + 24142 + ], + "zanik": [ + 8870, + 8887, + 8888, + 8889, + 11062 + ], + "bone dagger": [ + 8872, + 8874, + 8876, + 8878 + ], + "black mask": [ + 8901, + 8903, + 8905, + 8907, + 8909, + 8911, + 8913, + 8915, + 8917, + 8919, + 8921, + 11774, + 11775, + 11776, + 11777, + 11778, + 11779, + 11780, + 11781, + 11782, + 11783, + 11784 + ], + "bandana eyepatch": [ + 8924, + 8925, + 8926, + 8927 + ], + "rum": [ + 8940, + 8941 + ], + "blue monkey": [ + 8943, + 8944, + 8945 + ], + "red monkey": [ + 8946, + 8947, + 8948 + ], + "brewin guide": [ + 8989, + 8990 + ], + "skull sceptre": [ + 9013, + 21276 + ], + "magic essence": [ + 9019, + 9021, + 9022, + 9023, + 9024 + ], + "pharaohs sceptre": [ + 9044, + 9046, + 9048, + 9050, + 13074, + 13075, + 13076, + 13077, + 13078 + ], + "emerald lantern": [ + 9064, + 9065, + 20722 + ], + "moonclan hat": [ + 9069, + 10608 + ], + "astral rune": [ + 9075, + 11699 + ], + "kindling": [ + 9094, + 20799 + ], + "lunar helm": [ + 9096, + 10609 + ], + "blurite bolts": [ + 9139, + 9286, + 9293, + 9300, + 9376 + ], + "iron bolts": [ + 9140, + 9287, + 9294, + 9301, + 9377 + ], + "steel bolts": [ + 9141, + 9288, + 9295, + 9302, + 9378 + ], + "mithril bolts": [ + 9142, + 9289, + 9296, + 9303, + 9379 + ], + "adamant bolts": [ + 9143, + 9290, + 9297, + 9304, + 9380 + ], + "runite bolts": [ + 9144, + 9291, + 9298, + 9305, + 9381 + ], + "silver bolts": [ + 9145, + 9292, + 9299, + 9306, + 9382 + ], + "bronze crossbow": [ + 9174, + 9454 + ], + "blurite crossbow": [ + 9176, + 9456 + ], + "iron crossbow": [ + 9177, + 9457 + ], + "steel crossbow": [ + 9179, + 9459 + ], + "adamant crossbow": [ + 9183, + 9463 + ], + "rune crossbow": [ + 9185, + 23601 + ], + "jade bolts": [ + 9237, + 9335 + ], + "topaz bolts": [ + 9239, + 9336 + ], + "sapphire bolts": [ + 9240, + 9337 + ], + "emerald bolts": [ + 9241, + 9338 + ], + "ruby bolts": [ + 9242, + 9339 + ], + "diamond bolts": [ + 9243, + 9340, + 23649 + ], + "dragonstone bolts": [ + 9244, + 9341 + ], + "onyx bolts": [ + 9245, + 9342 + ], + "mith grapple": [ + 9418, + 9419 + ], + "half made batta": [ + 9478, + 9480, + 9482, + 9483, + 9485 + ], + "half made bowl": [ + 9558, + 9559, + 9561, + 9563 + ], + "mixed saturday": [ + 9571, + 9572, + 9573 + ], + "mixed dragon": [ + 9574, + 9575, + 9576 + ], + "half made crunchy": [ + 9577, + 9579, + 9581, + 9583 + ], + "dossier": [ + 9589, + 9590 + ], + "castle sketch": [ + 9646, + 9647, + 9648 + ], + "tome of experience": [ + 9656, + 9657, + 9658, + 22415 + ], + "useless key": [ + 9662, + 16684 + ], + "proselyte sallet": [ + 9672, + 20563 + ], + "proselyte hauberk": [ + 9674, + 10620, + 20564 + ], + "proselyte cuisse": [ + 9676, + 20565 + ], + "page": [ + 9684, + 9685, + 9686 + ], + "fragment": [ + 9687, + 9688, + 9689 + ], + "pipe": [ + 9723, + 10871 + ], + "combat potion": [ + 9739, + 9741, + 9743, + 9745 + ], + "attack cape": [ + 9747, + 9748, + 10639 + ], + "strength cape": [ + 9750, + 9751, + 10640 + ], + "defence cape": [ + 9753, + 9754, + 10641 + ], + "ranging cape": [ + 9756, + 9757, + 10642 + ], + "prayer cape": [ + 9759, + 9760, + 10643 + ], + "magic cape": [ + 9762, + 9763, + 10644 + ], + "runecraft cape": [ + 9765, + 9766, + 10645 + ], + "hitpoints cape": [ + 9768, + 9769, + 10647 + ], + "agility cape": [ + 9771, + 9772, + 10648, + 13340, + 13341 + ], + "herblore cape": [ + 9774, + 9775, + 10649 + ], + "thieving cape": [ + 9777, + 9778, + 10650 + ], + "crafting cape": [ + 9780, + 9781, + 10651 + ], + "fletching cape": [ + 9783, + 9784, + 10652 + ], + "slayer cape": [ + 9786, + 9787, + 10653 + ], + "construct cape": [ + 9789, + 9790, + 10654 + ], + "mining cape": [ + 9792, + 9793, + 10655 + ], + "smithing cape": [ + 9795, + 9796, + 10656 + ], + "fishing cape": [ + 9798, + 9799, + 10657 + ], + "cooking cape": [ + 9801, + 9802, + 10658 + ], + "firemaking cape": [ + 9804, + 9805, + 10659 + ], + "woodcutting cape": [ + 9807, + 10660 + ], + "farming cape": [ + 9810, + 9811, + 10661 + ], + "quest point cape": [ + 9813, + 10662, + 13068 + ], + "oak cape rack": [ + 9817, + 9843 + ], + "teak cape rack": [ + 9818, + 9844 + ], + "mahogany cape rack": [ + 9819, + 9845 + ], + "gilded cape rack": [ + 9820, + 9846 + ], + "marble cape rack": [ + 9821, + 9847 + ], + "oak armour case": [ + 9826, + 9859 + ], + "teak armour case": [ + 9827, + 9860 + ], + "mahogany armour case": [ + 9828, + 9861 + ], + "oak toy box": [ + 9836, + 9849 + ], + "teak toy box": [ + 9837, + 9850 + ], + "mahogany toy box": [ + 9838, + 9851 + ], + "oak treasure chest": [ + 9839, + 9862 + ], + "teak treasure chest": [ + 9840, + 9863 + ], + "ghost buster": [ + 9906, + 9907, + 9908, + 9909, + 9910, + 9911, + 9912 + ], + "jack lantern mask": [ + 9920, + 10723 + ], + "skeleton boots": [ + 9921, + 10724 + ], + "skeleton gloves": [ + 9922, + 10725 + ], + "skeleton leggings": [ + 9923, + 10726 + ], + "skeleton shirt": [ + 9924, + 10727 + ], + "skeleton mask": [ + 9925, + 10728 + ], + "bomber jacket": [ + 9944, + 11135 + ], + "hunter cape": [ + 9948, + 9949, + 10646 + ], + "kebbit": [ + 9953, + 9954, + 9955, + 9956, + 9957, + 9958, + 9959, + 9960, + 9961, + 9962, + 9963, + 9964 + ], + "butterfly": [ + 9970, + 9971, + 9972, + 9973 + ], + "chinchompa": [ + 9976, + 10033 + ], + "red chinchompa": [ + 9977, + 10034 + ], + "hunter potion": [ + 9998, + 10000, + 10002, + 10004 + ], + "falconers glove": [ + 10023, + 10024 + ], + "impinabox": [ + 10027, + 10028 + ], + "kyatt top": [ + 10037, + 10622 + ], + "larupia top": [ + 10043, + 10623 + ], + "graahk top": [ + 10049, + 10624 + ], + "wood camo top": [ + 10053, + 10625 + ], + "jungle camo top": [ + 10057, + 10626 + ], + "desert camo top": [ + 10061, + 10627 + ], + "polar camo top": [ + 10065, + 10628 + ], + "spotted cape": [ + 10069, + 10073, + 10663 + ], + "spottier cape": [ + 10071, + 10074, + 10664 + ], + "bobs red shirt": [ + 10316, + 10714 + ], + "bobs blue shirt": [ + 10318, + 10715 + ], + "bobs green shirt": [ + 10320, + 10716 + ], + "bobs black shirt": [ + 10322, + 10717 + ], + "bobs purple shirt": [ + 10324, + 10718 + ], + "3rd age robe top": [ + 10338, + 20576 + ], + "3rd age robe": [ + 10340, + 20577 + ], + "strength amulet": [ + 10364, + 10736 + ], + "zamorak dhide": [ + 10370, + 10790 + ], + "saradomin dhide": [ + 10386, + 10792 + ], + "a powdered wig": [ + 10392, + 10740 + ], + "flared trousers": [ + 10394, + 10742 + ], + "pantaloons": [ + 10396, + 10744 + ], + "sleeping cap": [ + 10398, + 10746 + ], + "black elegant shirt": [ + 10400, + 10748 + ], + "red elegant shirt": [ + 10404, + 10750 + ], + "blue elegant shirt": [ + 10408, + 10752 + ], + "green elegant shirt": [ + 10412, + 10754 + ], + "purple elegant shirt": [ + 10416, + 10756 + ], + "saradomin robe top": [ + 10458, + 10784 + ], + "zamorak robe top": [ + 10460, + 10786 + ], + "guthix robe top": [ + 10462, + 10788 + ], + "avas accumulator": [ + 10499, + 23609 + ], + "reindeer hat": [ + 10507, + 10722 + ], + "fremennik sea boots": [ + 10510, + 13129, + 13130, + 13131, + 13132 + ], + "attacker horn": [ + 10516, + 10517, + 10518, + 10519, + 10520 + ], + "collection bag": [ + 10521, + 10522, + 10523, + 10524, + 10525 + ], + "healer horn": [ + 10526, + 10527, + 10528, + 10529, + 10530 + ], + "healing vial": [ + 10542, + 10543, + 10544, + 10545, + 10546 + ], + "healer hat": [ + 10547, + 20511, + 24172 + ], + "fighter hat": [ + 10548, + 20507, + 24173 + ], + "ranger hat": [ + 10550, + 20509, + 24174 + ], + "fighter torso": [ + 10551, + 20513, + 24175 + ], + "penance gloves": [ + 10553, + 10554 + ], + "penance skirt": [ + 10555, + 20515, + 24176 + ], + "attacker icon": [ + 10556, + 22346, + 22347, + 22348, + 22349, + 22721, + 22722, + 22723, + 22729, + 22730, + 23460, + 23461, + 23462, + 23463, + 23464, + 23465 + ], + "collector icon": [ + 10557, + 22312, + 22313, + 22314, + 22315, + 22337, + 22338, + 22339, + 22724, + 23471, + 23472, + 23473, + 23474, + 23475, + 23476, + 23477 + ], + "defender icon": [ + 10558, + 22340, + 22341, + 22342, + 22343, + 22344, + 22345, + 22725, + 22726, + 22727, + 22728, + 23466, + 23467, + 23468, + 23469, + 23470 + ], + "healer icon": [ + 10559, + 10567, + 20802, + 22308, + 22309, + 22310, + 22311, + 23478, + 23479, + 23480, + 23481, + 23482, + 23483, + 23484, + 23485, + 23486 + ], + "keris": [ + 10581, + 10582, + 10583, + 10584 + ], + "parchment": [ + 10585, + 11036 + ], + "clockwork suit": [ + 10595, + 10596 + ], + "mission report": [ + 10597, + 10598, + 10599 + ], + "dhide body": [ + 10682, + 10683, + 10684, + 10685 + ], + "wizard robe": [ + 10686, + 10687 + ], + "yakhide armour": [ + 10822, + 10824 + ], + "helm of neitiznot": [ + 10828, + 23591 + ], + "hard hat": [ + 10862, + 10883 + ], + "keg": [ + 10885, + 10898 + ], + "prayer book": [ + 10886, + 10890 + ], + "barrelchest anchor": [ + 10887, + 10888 + ], + "mixture step": [ + 10909, + 10911, + 10913, + 10915, + 10917, + 10919, + 10921, + 10923 + ], + "sanfew serum": [ + 10925, + 10927, + 10929, + 10931, + 23559, + 23561, + 23563, + 23565 + ], + "lumberjack top": [ + 10939, + 10945 + ], + "skull staples": [ + 10950, + 10951 + ], + "cog": [ + 10983, + 10984 + ], + "meter": [ + 10987, + 10988 + ], + "capacitor": [ + 10989, + 10990 + ], + "powerbox": [ + 10993, + 10994 + ], + "chicken head": [ + 11015, + 11021 + ], + "chicken feet": [ + 11016, + 11019 + ], + "chicken wings": [ + 11017, + 11020 + ], + "chicken legs": [ + 11018, + 11022 + ], + "rotten barrel": [ + 11044, + 11045 + ], + "artefact": [ + 11049, + 11051, + 11053, + 11055, + 11057, + 11059 + ], + "gold bracelet": [ + 11068, + 11069 + ], + "sapphire bracelet": [ + 11071, + 11072 + ], + "emerald bracelet": [ + 11076, + 11078 + ], + "castle wars bracelet": [ + 11079, + 11081, + 11083 + ], + "ruby bracelet": [ + 11085, + 11087 + ], + "diamond bracelet": [ + 11092, + 11094 + ], + "abyssal bracelet": [ + 11095, + 11097, + 11099, + 11101, + 11103 + ], + "skills necklace": [ + 11105, + 11107, + 11109, + 11111, + 11113, + 11968, + 11970 + ], + "combat bracelet": [ + 11118, + 11120, + 11122, + 11124, + 11126, + 11972, + 11974 + ], + "berserker necklace": [ + 11128, + 23240 + ], + "onyx bracelet": [ + 11130, + 11132 + ], + "dream vial": [ + 11151, + 11152, + 11153 + ], + "newspaper": [ + 11169, + 11171 + ], + "half certificate": [ + 11173, + 11174 + ], + "digsite pendant": [ + 11190, + 11191, + 11192, + 11193, + 11194 + ], + "dragon arrow": [ + 11212, + 11227, + 11228, + 11229, + 20389 + ], + "dragon fire arrow": [ + 11217, + 11222 + ], + "dragon dart": [ + 11230, + 11231, + 11233, + 11234 + ], + "dark bow": [ + 11235, + 12765, + 12766, + 12767, + 12768, + 20408 + ], + "cavalier mask": [ + 11277, + 11280 + ], + "beret mask": [ + 11278, + 11282 + ], + "dragonfire shield": [ + 11283, + 11284 + ], + "dragon helm": [ + 11335, + 12417 + ], + "ancient page": [ + 11341, + 11342, + 11343, + 11344, + 11345, + 11346, + 11347, + 11348, + 11349, + 11350, + 11351, + 11352, + 11353, + 11354, + 11355, + 11356, + 11357, + 11358, + 11359, + 11360, + 11361, + 11362, + 11363, + 11364, + 11365, + 11366, + 12621, + 12622, + 12623, + 12624 + ], + "bronze hasta": [ + 11367, + 11379, + 11381, + 11382, + 11384 + ], + "iron hasta": [ + 11369, + 11386, + 11388, + 11389, + 11391 + ], + "steel hasta": [ + 11371, + 11393, + 11395, + 11396, + 11398 + ], + "mithril hasta": [ + 11373, + 11400, + 11402, + 11403, + 11405 + ], + "adamant hasta": [ + 11375, + 11407, + 11409, + 11410, + 11412 + ], + "rune hasta": [ + 11377, + 11414, + 11416, + 11417, + 11419 + ], + "fish vial": [ + 11427, + 11428 + ], + "attack mix": [ + 11429, + 11431 + ], + "antipoison mix": [ + 11433, + 11435 + ], + "relicyms mix": [ + 11437, + 11439 + ], + "strength mix": [ + 11441, + 11443 + ], + "combat mix": [ + 11445, + 11447 + ], + "restore mix": [ + 11449, + 11451 + ], + "energy mix": [ + 11453, + 11455 + ], + "defence mix": [ + 11457, + 11459 + ], + "agility mix": [ + 11461, + 11463 + ], + "prayer mix": [ + 11465, + 11467 + ], + "superattack mix": [ + 11469, + 11471 + ], + "antipoison supermix": [ + 11473, + 11475 + ], + "fishing mix": [ + 11477, + 11479 + ], + "super energy mix": [ + 11481, + 11483 + ], + "super str mix": [ + 11485, + 11487 + ], + "magic essence mix": [ + 11489, + 11491 + ], + "super restore mix": [ + 11493, + 11495 + ], + "super def mix": [ + 11497, + 11499 + ], + "antidote mix": [ + 11501, + 11503 + ], + "antifire mix": [ + 11505, + 11507 + ], + "ranging mix": [ + 11509, + 11511 + ], + "magic mix": [ + 11513, + 11515 + ], + "hunting mix": [ + 11517, + 11519 + ], + "zamorak mix": [ + 11521, + 11523 + ], + "void mage helm": [ + 11663, + 11674, + 20477, + 24183 + ], + "void ranger helm": [ + 11664, + 11675, + 20479, + 24184 + ], + "void melee helm": [ + 11665, + 11676, + 20481, + 24185 + ], + "void seal": [ + 11666, + 11667, + 11668, + 11669, + 11670, + 11671, + 11672, + 11673 + ], + "beach boxing gloves": [ + 11705, + 11706 + ], + "super ranging": [ + 11722, + 11723, + 11724, + 11725 + ], + "super magic potion": [ + 11726, + 11727, + 11728, + 11729 + ], + "overload": [ + 11730, + 11731, + 11732, + 11733, + 20985, + 20986, + 20987, + 20988, + 20989, + 20990, + 20991, + 20992, + 20993, + 20994, + 20995, + 20996 + ], + "absorption": [ + 11734, + 11735, + 11736, + 11737 + ], + "armadyl crossbow": [ + 11785, + 23611 + ], + "steam battlestaff": [ + 11787, + 12795 + ], + "mystic steam staff": [ + 11789, + 12796 + ], + "staff of the dead": [ + 11791, + 23613 + ], + "godsword shards": [ + 11794, + 11796, + 11800 + ], + "armadyl godsword": [ + 11802, + 20368, + 20593, + 22665 + ], + "bandos godsword": [ + 11804, + 20370, + 20782, + 21060 + ], + "saradomin godsword": [ + 11806, + 20372 + ], + "zamorak godsword": [ + 11808, + 20374 + ], + "godsword shard": [ + 11818, + 11820, + 11822 + ], + "bandos tassets": [ + 11834, + 23646 + ], + "dragon boots": [ + 11840, + 22234 + ], + "knights notes": [ + 11842, + 11843 + ], + "graceful hood": [ + 11850, + 11851, + 13579, + 13580, + 13591, + 13592, + 13603, + 13604, + 13615, + 13616, + 13627, + 13628, + 13667, + 13668, + 21061, + 21063 + ], + "graceful cape": [ + 11852, + 11853, + 13581, + 13582, + 13593, + 13594, + 13605, + 13606, + 13617, + 13618, + 13629, + 13630, + 13669, + 13670, + 21064, + 21066 + ], + "graceful top": [ + 11854, + 11855, + 13583, + 13584, + 13595, + 13596, + 13607, + 13608, + 13619, + 13620, + 13631, + 13632, + 13671, + 13672, + 21067, + 21069 + ], + "graceful legs": [ + 11856, + 11857, + 13585, + 13586, + 13597, + 13598, + 13609, + 13610, + 13621, + 13622, + 13633, + 13634, + 13673, + 13674, + 21070, + 21072 + ], + "graceful gloves": [ + 11858, + 11859, + 13587, + 13588, + 13599, + 13600, + 13611, + 13612, + 13623, + 13624, + 13635, + 13636, + 13675, + 13676, + 21073, + 21075 + ], + "graceful boots": [ + 11860, + 11861, + 13589, + 13590, + 13601, + 13602, + 13613, + 13614, + 13625, + 13626, + 13637, + 13638, + 13677, + 13678, + 21076, + 21078 + ], + "slayer helmet": [ + 11864, + 11865, + 19639, + 19641, + 19643, + 19645, + 19647, + 19649, + 21264, + 21266, + 21888, + 21890, + 23073, + 23075 + ], + "slayer ring": [ + 11866, + 11867, + 11868, + 11869, + 11870, + 11871, + 11872, + 11873, + 21268 + ], + "trident": [ + 11905, + 11907, + 11908, + 22288, + 22290 + ], + "box of chocolate strawberries": [ + 11912, + 11914 + ], + "dragon pickaxe": [ + 11920, + 12797, + 23677 + ], + "malediction ward": [ + 11924, + 12806 + ], + "odium ward": [ + 11926, + 12807 + ], + "odium shard": [ + 11928, + 11929, + 11930 + ], + "malediction shard": [ + 11931, + 11932, + 11933 + ], + "looting bag": [ + 11941, + 22586 + ], + "extended antifire": [ + 11951, + 11953, + 11955, + 11957 + ], + "extended antifire mix": [ + 11960, + 11962 + ], + "occult necklace": [ + 12002, + 19720, + 23654 + ], + "soft clay pack": [ + 12009, + 12010 + ], + "black wizard robe": [ + 12449, + 12451 + ], + "black wizard hat": [ + 12453, + 12455 + ], + "ring of the gods": [ + 12601, + 13202 + ], + "tyrannical ring": [ + 12603, + 12691 + ], + "treasonous ring": [ + 12605, + 12692 + ], + "bandos page": [ + 12613, + 12614, + 12615, + 12616 + ], + "armadyl page": [ + 12617, + 12618, + 12619, + 12620 + ], + "stamina potion": [ + 12625, + 12627, + 12629, + 12631, + 23583, + 23585, + 23587, + 23589 + ], + "stamina mix": [ + 12633, + 12635 + ], + "saradomin halo": [ + 12637, + 20537, + 24169 + ], + "zamorak halo": [ + 12638, + 20539, + 24170 + ], + "guthix halo": [ + 12639, + 20541, + 24171 + ], + "kalphite princess": [ + 12647, + 12654 + ], + "pet smoke devil": [ + 12648, + 22663 + ], + "junk": [ + 12656, + 12657 + ], + "clan wars cape": [ + 12659, + 12660, + 12661, + 12662, + 12663, + 12664, + 12665, + 12666, + 12667, + 12668, + 12669, + 12670, + 12671, + 12672, + 12673, + 12674, + 12675, + 12676, + 12677, + 12678, + 12679, + 12680, + 12681, + 12682, + 12683, + 12684, + 12685, + 12686, + 12687, + 12688, + 12689, + 12690, + 21396, + 21397, + 21398, + 21399, + 21400, + 21401, + 21402, + 21403, + 21404, + 21405, + 21406, + 21407, + 21408, + 21409, + 21410, + 21411, + 21412, + 21413, + 21414, + 21415, + 21416, + 21417, + 21418, + 21419, + 21420, + 21421, + 21422, + 21423, + 21424, + 21425, + 21426, + 21427 + ], + "super combat potion": [ + 12695, + 12697, + 12699, + 12701, + 23543, + 23545, + 23547, + 23549 + ], + "menagerie": [ + 12725, + 12726 + ], + "archaic emblem": [ + 12746, + 12747, + 12748, + 12749, + 12750, + 12751, + 12752, + 12753, + 12754, + 12755, + 12756, + 23487 + ], + "rune pouch": [ + 12791, + 23650 + ], + "nest box": [ + 12792, + 12793, + 12794, + 13654, + 23062 + ], + "elysian spirit shield": [ + 12817, + 19559 + ], + "spirit shield": [ + 12829, + 23599 + ], + "blessed spirit shield": [ + 12831, + 23642 + ], + "amulet of the damned": [ + 12851, + 12853 + ], + "thanksgiving dinner": [ + 12861, + 12862 + ], + "antisantas coal box": [ + 12897, + 12898 + ], + "toxic trident": [ + 12899, + 12900, + 22292, + 22294 + ], + "toxic staff": [ + 12902, + 12904 + ], + "antivenom": [ + 12905, + 12907, + 12909, + 12911, + 12913, + 12915, + 12917, + 12919 + ], + "pet snakeling": [ + 12921, + 12939, + 12940 + ], + "toxic blowpipe": [ + 12924, + 12926 + ], + "serpentine helm": [ + 12929, + 12931, + 13196, + 13197, + 13198, + 13199 + ], + "dragon defender": [ + 12954, + 19722, + 20463, + 23597, + 24143 + ], + "bronze set": [ + 12960, + 12962 + ], + "bronze trimmed set": [ + 12964, + 12966 + ], + "bronze goldtrimmed set": [ + 12968, + 12970 + ], + "iron set": [ + 12972, + 12974 + ], + "iron trimmed set": [ + 12976, + 12978 + ], + "iron goldtrimmed set": [ + 12980, + 12982 + ], + "steel set": [ + 12984, + 12986 + ], + "black set": [ + 12988, + 12990 + ], + "black trimmed set": [ + 12992, + 12994 + ], + "black goldtrimmed set": [ + 12996, + 12998 + ], + "mithril set": [ + 13000, + 13002 + ], + "mithril trimmed set": [ + 13004, + 13006 + ], + "mithril goldtrimmed set": [ + 13008, + 13010 + ], + "adamant set": [ + 13012, + 13014 + ], + "adamant trimmed set": [ + 13016, + 13018 + ], + "adamant goldtrimmed set": [ + 13020, + 13022 + ], + "rune armour set": [ + 13024, + 13026 + ], + "rune trimmed set": [ + 13028, + 13030 + ], + "rune goldtrimmed set": [ + 13032, + 13034 + ], + "gilded armour set": [ + 13036, + 13038 + ], + "saradomin armour set": [ + 13040, + 13042 + ], + "zamorak armour set": [ + 13044, + 13046 + ], + "guthix armour set": [ + 13048, + 13050 + ], + "armadyl rune armour set": [ + 13052, + 13054 + ], + "bandos rune armour set": [ + 13056, + 13058 + ], + "ancient rune armour set": [ + 13060, + 13062 + ], + "achievement diary cape": [ + 13069, + 19476 + ], + "elite void top": [ + 13072, + 20467, + 24178 + ], + "elite void robe": [ + 13073, + 20471, + 24180 + ], + "crystal halberd": [ + 13080, + 13081, + 13082, + 13083, + 13084, + 13085, + 13086, + 13087, + 13088, + 13089, + 13090, + 13091, + 13092, + 13093, + 13094, + 13095, + 13096, + 13097, + 13098, + 13099, + 13100, + 13101, + 16892, + 16893, + 23895, + 23896, + 23897, + 23987, + 23989, + 24125 + ], + "vetion jr": [ + 13179, + 13180 + ], + "old school bond": [ + 13190, + 13192 + ], + "music cape": [ + 13221, + 13222, + 13224 + ], + "eternal boots": [ + 13235, + 23644 + ], + "infernal axe": [ + 13241, + 13242 + ], + "infernal pickaxe": [ + 13243, + 13244 + ], + "abyssal dagger": [ + 13265, + 13267, + 13269, + 13271 + ], + "max cape": [ + 13280, + 13282, + 13342 + ], + "bank key": [ + 13302, + 13303, + 13304, + 13305, + 13306 + ], + "deadmans chest": [ + 13317, + 24189 + ], + "deadmans legs": [ + 13318, + 24190 + ], + "deadmans cape": [ + 13319, + 24191 + ], + "rock golem": [ + 13321, + 21187, + 21188, + 21189, + 21190, + 21191, + 21192, + 21193, + 21194, + 21195, + 21196, + 21197, + 21340, + 21358, + 21359, + 21360 + ], + "baby chinchompa": [ + 13323, + 13324, + 13325, + 13326 + ], + "fire max cape": [ + 13329, + 20447, + 21186, + 24134 + ], + "vial of tears": [ + 13347, + 13348, + 13349, + 13350, + 13351 + ], + "shayzien gloves": [ + 13357, + 13362, + 13367, + 13372, + 13377 + ], + "shayzien boots": [ + 13358, + 13363, + 13368, + 13373, + 13378 + ], + "shayzien helm": [ + 13359, + 13364, + 13369, + 13374, + 13379 + ], + "shayzien greaves": [ + 13360, + 13365, + 13370, + 13375, + 13380 + ], + "shayzien platebody": [ + 13361, + 13366, + 13371, + 13376, + 13381 + ], + "xerics talisman": [ + 13392, + 13393 + ], + "servery incomplete stew": [ + 13415, + 13416 + ], + "ensouled goblin head": [ + 13447, + 13448 + ], + "ensouled monkey head": [ + 13450, + 13451 + ], + "ensouled imp head": [ + 13453, + 13454 + ], + "ensouled minotaur head": [ + 13456, + 13457 + ], + "ensouled scorpion head": [ + 13459, + 13460 + ], + "ensouled bear head": [ + 13462, + 13463 + ], + "ensouled unicorn head": [ + 13465, + 13466 + ], + "ensouled dog head": [ + 13468, + 13469 + ], + "ensouled chaos druid head": [ + 13471, + 13472 + ], + "ensouled giant head": [ + 13474, + 13475 + ], + "ensouled ogre head": [ + 13477, + 13478 + ], + "ensouled elf head": [ + 13480, + 13481 + ], + "ensouled troll head": [ + 13483, + 13484 + ], + "ensouled horror head": [ + 13486, + 13487 + ], + "ensouled kalphite head": [ + 13489, + 13490 + ], + "ensouled dagannoth head": [ + 13492, + 13493 + ], + "ensouled bloodveld head": [ + 13495, + 13496 + ], + "ensouled tzhaar head": [ + 13498, + 13499 + ], + "ensouled demon head": [ + 13501, + 13502 + ], + "ensouled aviansie head": [ + 13504, + 13505 + ], + "ensouled abyssal head": [ + 13507, + 13508 + ], + "ensouled dragon head": [ + 13510, + 13511 + ], + "dark manuscript": [ + 13514, + 13515, + 13516, + 13517, + 13518, + 13519, + 13520, + 13521, + 13522, + 13523 + ], + "shayzien supply gloves": [ + 13538, + 13543, + 13548, + 13553, + 13558 + ], + "shayzien supply boots": [ + 13539, + 13544, + 13549, + 13554, + 13559 + ], + "shayzien supply helm": [ + 13540, + 13545, + 13550, + 13555, + 13560 + ], + "shayzien supply greaves": [ + 13541, + 13546, + 13551, + 13556, + 13561 + ], + "shayzien supply platebody": [ + 13542, + 13547, + 13552, + 13557, + 13562 + ], + "shayzien supply set": [ + 13565, + 13566, + 13567, + 13568, + 13569 + ], + "dragon warhammer": [ + 13576, + 20785 + ], + "farmers boro trousers": [ + 13640, + 13641 + ], + "farmers boots": [ + 13644, + 13645 + ], + "farmers strawhat": [ + 13646, + 13647, + 21253, + 21254 + ], + "clue bottle": [ + 13648, + 13649, + 13650, + 13651, + 23129 + ], + "dragon claws": [ + 13652, + 20784 + ], + "heavy ballista": [ + 19481, + 23630 + ], + "dragon javelin": [ + 19484, + 19486, + 19488, + 19490, + 23648 + ], + "zenyte bracelet": [ + 19492, + 19532 + ], + "zenyte amulet": [ + 19501, + 19541 + ], + "mysterious note": [ + 19505, + 19507, + 19509 + ], + "satchel": [ + 19527, + 19528 + ], + "tormented bracelet": [ + 19544, + 23444 + ], + "necklace of anguish": [ + 19547, + 22249 + ], + "ring of suffering": [ + 19550, + 19710, + 20655, + 20657 + ], + "amulet of torture": [ + 19553, + 20366 + ], + "botanical pie": [ + 19659, + 19662 + ], + "clue nest": [ + 19712, + 19714, + 19716, + 19718, + 23127 + ], + "reward casket": [ + 19836, + 20543, + 20544, + 20545, + 20546, + 23245 + ], + "torn clue scroll": [ + 19837, + 19838, + 19839 + ], + "strange device": [ + 19939, + 23183 + ], + "bucket helm": [ + 19991, + 20059 + ], + "gnomish firelighter": [ + 20275, + 20278 + ], + "clue geode": [ + 20358, + 20360, + 20362, + 20364, + 23442 + ], + "steel trimmed set": [ + 20376, + 20379 + ], + "steel goldtrimmed set": [ + 20382, + 20385 + ], + "stash units": [ + 20532, + 20533, + 20534, + 20535, + 20536, + 23416 + ], + "dark altar": [ + 20619, + 22778 + ], + "occult altar": [ + 20620, + 20621, + 20622 + ], + "rift guardian": [ + 20665, + 20667, + 20669, + 20671, + 20673, + 20675, + 20677, + 20679, + 20681, + 20683, + 20685, + 20687, + 20689, + 20691, + 21990 + ], + "rejuvenation potion": [ + 20697, + 20699, + 20700, + 20701, + 20702 + ], + "tome of fire": [ + 20714, + 20716 + ], + "manor key": [ + 20766, + 21052 + ], + "ruby key": [ + 20767, + 21053 + ], + "emerald key": [ + 20768, + 21054 + ], + "sapphire key": [ + 20769, + 21055 + ], + "killers knife": [ + 20781, + 21059 + ], + "corrupted helm": [ + 20838, + 23840, + 23841, + 23842 + ], + "dragon thrownaxe": [ + 20849, + 21207 + ], + "elder": [ + 20913, + 20914, + 20915, + 20916, + 20921, + 20922, + 20923, + 20924 + ], + "elder potion": [ + 20917, + 20918, + 20919, + 20920 + ], + "twisted": [ + 20925, + 20926, + 20927, + 20928, + 20933, + 20934, + 20935, + 20936 + ], + "twisted potion": [ + 20929, + 20930, + 20931, + 20932 + ], + "kodai": [ + 20937, + 20938, + 20939, + 20940, + 20945, + 20946, + 20947, + 20948 + ], + "kodai potion": [ + 20941, + 20942, + 20943, + 20944 + ], + "revitalisation": [ + 20949, + 20950, + 20951, + 20952, + 20957, + 20958, + 20959, + 20960 + ], + "revitalisation potion": [ + 20953, + 20954, + 20955, + 20956, + 22096 + ], + "prayer enhance": [ + 20961, + 20962, + 20963, + 20964, + 20965, + 20966, + 20967, + 20968, + 20969, + 20970, + 20971, + 20972 + ], + "xerics aid": [ + 20973, + 20974, + 20975, + 20976, + 20977, + 20978, + 20979, + 20980, + 20981, + 20982, + 20983, + 20984 + ], + "elder maul": [ + 21003, + 21205 + ], + "kodai wand": [ + 21006, + 23626 + ], + "dragon sword": [ + 21009, + 21206 + ], + "infernal harpoon": [ + 21031, + 21033 + ], + "medium storage unit": [ + 21038, + 21040 + ], + "large storage unit": [ + 21039, + 21041, + 21042 + ], + "opal amulet": [ + 21099, + 21108 + ], + "jade amulet": [ + 21102, + 21111 + ], + "topaz amulet": [ + 21105, + 21114 + ], + "ring of returning": [ + 21129, + 21132, + 21134, + 21136, + 21138 + ], + "necklace of passage": [ + 21146, + 21149, + 21151, + 21153, + 21155 + ], + "burning amulet": [ + 21166, + 21169, + 21171, + 21173, + 21175 + ], + "mysterious orb": [ + 21261, + 23069 + ], + "infernal max cape": [ + 21284, + 21285, + 21289, + 24133 + ], + "infernal cape": [ + 21287, + 21295, + 21297, + 23622, + 24224 + ], + "amethyst javelin": [ + 21318, + 21320, + 21322, + 21324 + ], + "amethyst arrow": [ + 21326, + 21332, + 21334, + 21336 + ], + "amethyst fire arrow": [ + 21328, + 21330 + ], + "master scroll book": [ + 21387, + 21389 + ], + "wilderness cape": [ + 21428, + 21429, + 21430, + 21431, + 21432, + 21434, + 21435, + 21436, + 21437, + 21438 + ], + "teak seedling": [ + 21469, + 21473 + ], + "mahogany seedling": [ + 21471, + 21475 + ], + "fossil island wyvern": [ + 21507, + 21508 + ], + "ancient wyvern shield": [ + 21633, + 21634 + ], + "mushroom pie": [ + 21687, + 21690 + ], + "jonas mask": [ + 21719, + 21720 + ], + "granite ring": [ + 21739, + 21752 + ], + "imbued saradomin max cape": [ + 21776, + 24232, + 24238 + ], + "imbued zamorak max cape": [ + 21780, + 24233, + 24246 + ], + "imbued guthix max cape": [ + 21784, + 24234, + 24242 + ], + "imbued saradomin cape": [ + 21791, + 23607, + 24236, + 24248 + ], + "imbued guthix cape": [ + 21793, + 23603, + 24240, + 24249 + ], + "imbued zamorak cape": [ + 21795, + 23605, + 24244, + 24250 + ], + "bracelet of ethereum": [ + 21816, + 21817 + ], + "snow imp costume head": [ + 21841, + 21847 + ], + "snow imp costume body": [ + 21842, + 21849 + ], + "snow imp costume legs": [ + 21843, + 21851 + ], + "snow imp costume tail": [ + 21844, + 21853 + ], + "snow imp costume gloves": [ + 21845, + 21855 + ], + "snow imp costume feet": [ + 21846, + 21857 + ], + "santa suit": [ + 21866, + 21867, + 21868 + ], + "wrath rune": [ + 21880, + 22208 + ], + "dragon armour set": [ + 21882, + 21885 + ], + "dragon platebody": [ + 21892, + 22242 + ], + "dragon kiteshield": [ + 21895, + 22244 + ], + "assembler max cape": [ + 21898, + 21916, + 24135 + ], + "dragon crossbow": [ + 21902, + 21921 + ], + "dragon bolts": [ + 21905, + 21924, + 21926, + 21928, + 21930 + ], + "mythical cape": [ + 21913, + 22114 + ], + "avas assembler": [ + 21914, + 22109, + 24222 + ], + "opal dragon bolts": [ + 21932, + 21955 + ], + "jade dragon bolts": [ + 21934, + 21957 + ], + "pearl dragon bolts": [ + 21936, + 21959 + ], + "topaz dragon bolts": [ + 21938, + 21961 + ], + "sapphire dragon bolts": [ + 21940, + 21963 + ], + "emerald dragon bolts": [ + 21942, + 21965 + ], + "ruby dragon bolts": [ + 21944, + 21967 + ], + "diamond dragon bolts": [ + 21946, + 21969 + ], + "dragonstone dragon bolts": [ + 21948, + 21971 + ], + "onyx dragon bolts": [ + 21950, + 21973 + ], + "super antifire potion": [ + 21978, + 21981, + 21984, + 21987 + ], + "super antifire mix": [ + 21994, + 21997 + ], + "dragonfire ward": [ + 22002, + 22003 + ], + "map piece": [ + 22009, + 22010, + 22011, + 22012, + 22013, + 22014, + 22015, + 22016, + 22017, + 22018, + 22019, + 22020, + 22021, + 22022, + 22023, + 22024, + 22025, + 22026, + 22027, + 22028, + 22029, + 22030, + 22031, + 22032 + ], + "old notes": [ + 22051, + 22053, + 22055, + 22057, + 22059, + 22061, + 22063, + 22065, + 22067, + 22069, + 22071, + 22073, + 22075, + 22077, + 22410, + 22774, + 23023, + 23025, + 23027, + 23029, + 23031, + 23033, + 23035 + ], + "dragon key": [ + 22087, + 22092 + ], + "dragon key piece": [ + 22088, + 22089, + 22090, + 22091 + ], + "adamant heraldic helm": [ + 22159, + 22161, + 22163, + 22165, + 22167, + 22169, + 22171, + 22173, + 22175, + 22177, + 22179, + 22181, + 22183, + 22185, + 22187, + 22189 + ], + "extended super antifire": [ + 22209, + 22212, + 22215, + 22218 + ], + "extended super antifire mix": [ + 22221, + 22224 + ], + "avernic defender": [ + 22322, + 22441, + 24186 + ], + "sanguinesti staff": [ + 22323, + 22481 + ], + "ghrazi rapier": [ + 22324, + 23628 + ], + "scythe of vitur": [ + 22325, + 22486, + 22664 + ], + "bryophytas staff": [ + 22368, + 22370 + ], + "vial of blood": [ + 22405, + 22446 + ], + "battlemage potion": [ + 22449, + 22452, + 22455, + 22458 + ], + "bastion potion": [ + 22461, + 22464, + 22467, + 22470 + ], + "sinhaza shroud tier": [ + 22494, + 22496, + 22498, + 22500, + 22502 + ], + "coin pouch": [ + 22521, + 22522, + 22523, + 22524, + 22525, + 22526, + 22527, + 22528, + 22529, + 22530, + 22531, + 22532, + 22533, + 22534, + 22535, + 22536, + 22537, + 22538 + ], + "viggoras chainmace": [ + 22542, + 22545 + ], + "craws bow": [ + 22547, + 22550 + ], + "thammarons sceptre": [ + 22552, + 22555 + ], + "vestas longsword": [ + 22613, + 23615 + ], + "statiuss warhammer": [ + 22622, + 23620 + ], + "morrigans javelin": [ + 22636, + 23619 + ], + "zuriels staff": [ + 22647, + 23617 + ], + "dragon hasta": [ + 22731, + 22734, + 22737, + 22740, + 22743 + ], + "ikkle hydra": [ + 22746, + 22748, + 22750, + 22752 + ], + "energy disk": [ + 22765, + 22766, + 22767, + 22768 + ], + "unknown fluid": [ + 22769, + 22770, + 22771, + 22772, + 22773 + ], + "dragonfruit pie": [ + 22792, + 22795 + ], + "radas blessing": [ + 22803, + 22941, + 22943, + 22945, + 22947 + ], + "dragon knife": [ + 22804, + 22806, + 22808, + 22810, + 22812, + 22814 + ], + "cormorants glove": [ + 22816, + 22817 + ], + "celastrus seedling": [ + 22848, + 22852 + ], + "redwood seedling": [ + 22850, + 22854 + ], + "dragonfruit seedling": [ + 22862, + 22864 + ], + "bottomless compost bucket": [ + 22994, + 22997 + ], + "bottled dragonbreath": [ + 22999, + 23002 + ], + "treasure scroll": [ + 23067, + 23068, + 23070 + ], + "mystic set": [ + 23110, + 23113, + 23116, + 23119 + ], + "rune scimitar ornament kit": [ + 23321, + 23324, + 23327 + ], + "giant egg sac": [ + 23517, + 23520 + ], + "crystal seedling": [ + 23655, + 23657 + ], + "crystal axe": [ + 23673, + 23675, + 23862 + ], + "crystal pickaxe": [ + 23680, + 23682, + 23863 + ], + "divine super combat potion": [ + 23685, + 23688, + 23691, + 23694 + ], + "divine super attack potion": [ + 23697, + 23700, + 23703, + 23706 + ], + "divine super strength potion": [ + 23709, + 23712, + 23715, + 23718 + ], + "divine super defence potion": [ + 23721, + 23724, + 23727, + 23730 + ], + "divine ranging potion": [ + 23733, + 23736, + 23739, + 23742 + ], + "divine magic potion": [ + 23745, + 23748, + 23751, + 23754 + ], + "crystal harpoon": [ + 23762, + 23764, + 23864 + ], + "crystal dust": [ + 23804, + 23867, + 23964 + ], + "crystal seed": [ + 23808, + 23810 + ], + "weapon frame": [ + 23834, + 23871 + ], + "grym leaf": [ + 23835, + 23875 + ], + "linum tirinum": [ + 23836, + 23876 + ], + "phren bark": [ + 23838, + 23878 + ], + "corrupted body": [ + 23843, + 23844, + 23845 + ], + "corrupted legs": [ + 23846, + 23847, + 23848 + ], + "corrupted halberd": [ + 23849, + 23850, + 23851 + ], + "corrupted staff": [ + 23852, + 23853, + 23854 + ], + "corrupted bow": [ + 23855, + 23856, + 23857 + ], + "egniol potion": [ + 23882, + 23883, + 23884, + 23885 + ], + "crystal helm": [ + 23886, + 23887, + 23888, + 23971, + 23973 + ], + "crystal body": [ + 23889, + 23890, + 23891, + 23975, + 23977 + ], + "crystal legs": [ + 23892, + 23893, + 23894, + 23979, + 23981 + ], + "crystal staff": [ + 23898, + 23899, + 23900 + ], + "crystal crown": [ + 23911, + 23913, + 23915, + 23917, + 23919, + 23921, + 23923, + 23925 + ], + "blade of saeldor": [ + 23995, + 23997 + ], + "elven top": [ + 24009, + 24015, + 24021, + 24027 + ], + "elven skirt": [ + 24012, + 24018 + ], + "memoriam crystal": [ + 24030, + 24031, + 24032, + 24033 + ], + "armadyl halo": [ + 24147, + 24192, + 24194 + ], + "bandos halo": [ + 24149, + 24195, + 24197 + ], + "seren halo": [ + 24151, + 24198, + 24200 + ], + "ancient halo": [ + 24153, + 24201, + 24203 + ], + "brassica halo": [ + 24155, + 24204, + 24206 + ], + "victors cape": [ + 24207, + 24209, + 24211, + 24213, + 24215 + ], + "unsealed letter": [ + 24256, + 24257 + ], + "v sigil": [ + 24258, + 24259 + ], + "vs shield": [ + 24265, + 24266 + ], + "mysterious emblem": [ + 24277, + 24279, + 24281, + 24283, + 24285 + ] +} diff --git a/runelite-client/src/main/resources/item_variations.min.json b/runelite-client/src/main/resources/item_variations.min.json new file mode 100644 index 0000000000..49482c4a2f --- /dev/null +++ b/runelite-client/src/main/resources/item_variations.min.json @@ -0,0 +1 @@ +{"toolkit":[1,4051],"excalibur":[35,8280],"longbow":[48,839],"shortbow":[50,841],"oak shortbow":[54,843],"oak longbow":[56,845],"willow longbow":[58,847],"willow shortbow":[60,849],"maple longbow":[62,851],"maple shortbow":[64,853,20403],"yew longbow":[66,855],"yew shortbow":[68,857,20401],"magic longbow":[70,859],"magic shortbow":[72,861,12788,20558],"lever":[83,10991,10992],"boots of lightness":[88,89],"strength potion":[113,115,117,119],"attack potion":[121,123,125,2428],"restore potion":[127,129,131,2430],"defence potion":[133,135,137,2432],"prayer potion":[139,141,143,2434,20393,20394,20395,20396],"super attack":[145,147,149,2436],"fishing potion":[151,153,155,2438],"super strength":[157,159,161,2440],"super defence":[163,165,167,2442],"ranging potion":[169,171,173,2444,23551,23553,23555,23557],"antipoison":[175,177,179,2446],"superantipoison":[181,183,185,2448],"weapon poison":[187,1465,5936,5937,5939,5940],"zamorak brew":[189,191,193,2450],"potion":[195,2394,22409],"vial of water":[227,9086],"vial":[229,2389,2390,23839,23879],"pestle and mortar":[233,23865],"unicorn horn":[237,1487],"wine of zamorak":[245,23489],"key":[275,293,298,423,1543,1544,1545,1546,1547,1548,2411,2832,2834,2836,2838,2840,3606,3608,5010,6104,7297,7299,7302,9722,11039,11040,11041,11042,11043,19761,19812],"sheep bones":[280,281,282,283],"notes":[291,20770,20771,20772,21056,21057,21058],"glarials urn":[296,297],"small fishing net":[303,6209],"raw shrimps":[317,2514],"burnt fish":[323,343,357,367,369,20854,23873],"shark":[385,6969,20390],"casket":[405,2714,2715,2717,2718,2720,2721,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746,2748,2775,2777,2779,2781,2784,2787,2789,2791,2802,2804,2806,2808,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,3511,3517,3519,3521,3523,3527,3529,3531,3533,3535,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3581,3583,3585,3587,3589,3591,3593,3595,3597,3600,3603,7237,7240,7242,7244,7246,7257,7259,7261,7263,7265,7267,7287,7289,7291,7293,7295,7306,7308,7310,7312,7314,7316,7318,7956,10181,10183,10185,10187,10189,10191,10193,10195,10197,10199,10201,10203,10205,10207,10209,10211,10213,10215,10217,10219,10221,10223,10225,10227,10229,10231,10233,10235,10237,10239,10241,10243,10245,10247,10249,10251,10253,10255,10257,10259,10261,10263,10265,10267,10269,10271,10273,10275,10277,10279,12022,12024,12026,12028,12030,12032,12034,12036,12038,12040,12042,12044,12046,12048,12050,12052,12054,12084,12112,12129,12131,12160,12163,12165,12171,12180,12543,12545,12547,12549,12551,12553,12555,12557,12559,12561,12563,12565,12580,12583,12586,12589,12591,19775,19777,19779,19781,19815,19827,19832,19834,19841,19843,19845,19849,19851,19861,19863,19865,19867,19869,19871,19873,19875,19877,19879,19881],"pigeon cage":[424,425],"priest gown":[426,428],"karamjan rum":[431,3164,3165],"chest key":[432,709,2404,4273],"scorpion cage":[456,457,458,459,460,461,462,463],"broken pickaxe":[468,470,472,474,476,478,11923,12594],"axe handle":[492,7952],"broken axe":[494,496,498,500,502,504,506,6741],"bones":[526,2530,3187],"monks robe":[542,20202,23306],"monks robe top":[544,20199,23303],"shade robe":[548,10634],"ghostspeak amulet":[552,4250],"fire rune":[554,6428,7554,9699,11686,11718],"water rune":[555,6424,7556,9691,11687,11716],"air rune":[556,6422,7558,9693,11688,11715],"earth rune":[557,6426,9695,11689,11717],"mind rune":[558,6436,9697,11690],"body rune":[559,6438,11691],"death rune":[560,6432,11692,11713],"nature rune":[561,11693],"chaos rune":[562,6430,7560,11694,11712],"law rune":[563,6434,11695],"cosmic rune":[564,11696],"blood rune":[565,11697,11714],"soul rune":[566,11698],"blue wizard robe":[577,7390,7392],"blue wizard hat":[579,7394,7396],"bailing bucket":[583,585],"tinderbox":[590,7156],"torch":[595,8987,9665],"bronze fire arrow":[598,942],"bone key":[605,4272],"locating crystal":[611,612,613,614,615],"coins":[617,995,6964,8890],"paramaya ticket":[619,620],"blue hat":[660,740],"panning tray":[677,678,679],"broken glass":[690,1469],"level certificate":[691,692,693],"stone tablet":[699,22991],"mixed chemicals":[705,706],"vase":[710,3734],"cup of tea":[712,1978,4242,4243,4245,4246,4838,7730,7731,7733,7734,7736,7737],"clue scroll":[713,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2716,2719,2722,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2773,2774,2776,2778,2780,2782,2783,2785,2786,2788,2790,2792,2793,2794,2796,2797,2799,2801,2803,2805,2807,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845,2847,2848,2849,2851,2853,2855,2856,2857,2858,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3512,3513,3514,3515,3516,3518,3520,3522,3524,3525,3526,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572,3573,3574,3575,3577,3579,3580,3582,3584,3586,3588,3590,3592,3594,3596,3598,3599,3601,3602,3604,3605,3607,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,7236,7238,7239,7241,7243,7245,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7258,7260,7262,7264,7266,7268,7270,7272,7274,7276,7278,7280,7282,7284,7286,7288,7290,7292,7294,7296,7298,7300,7301,7303,7304,7305,7307,7309,7311,7313,7315,7317,10180,10182,10184,10186,10188,10190,10192,10194,10196,10198,10200,10202,10204,10206,10208,10210,10212,10214,10216,10218,10220,10222,10224,10226,10228,10230,10232,10234,10236,10238,10240,10242,10244,10246,10248,10250,10252,10254,10256,10258,10260,10262,10264,10266,10268,10270,10272,10274,10276,10278,12021,12023,12025,12027,12029,12031,12033,12035,12037,12039,12041,12043,12045,12047,12049,12051,12053,12055,12057,12059,12061,12063,12065,12067,12069,12071,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,12095,12096,12097,12098,12099,12100,12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12113,12114,12115,12116,12117,12118,12119,12120,12121,12122,12123,12124,12125,12126,12127,12130,12132,12133,12134,12135,12136,12137,12138,12140,12141,12142,12143,12144,12145,12146,12147,12148,12149,12150,12151,12152,12153,12154,12155,12156,12157,12158,12159,12162,12164,12166,12167,12168,12169,12170,12172,12173,12174,12175,12176,12177,12178,12179,12181,12182,12183,12184,12185,12186,12187,12188,12189,12190,12191,12192,12542,12544,12546,12548,12550,12552,12554,12556,12558,12560,12562,12564,12566,12568,12570,12572,12574,12576,12578,12581,12584,12587,12590,19734,19736,19738,19740,19742,19744,19746,19748,19750,19752,19754,19756,19758,19760,19762,19764,19766,19768,19770,19772,19774,19776,19778,19780,19782,19783,19784,19785,19786,19787,19788,19789,19790,19791,19792,19793,19794,19795,19796,19797,19798,19799,19800,19801,19802,19803,19804,19805,19806,19807,19808,19809,19810,19811,19813,19814,19816,19817,19818,19819,19820,19821,19822,19823,19824,19825,19826,19828,19829,19830,19831,19833,19835,19840,19842,19844,19846,19848,19850,19852,19853,19854,19856,19857,19858,19860,19862,19864,19866,19868,19870,19872,19874,19876,19878,19880,19882,19884,19886,19888,19890,19892,19894,19896,19898,19900,19902,19904,19906,19908,19910,21524,21525,21526,21527,22000,22001,23045,23046,23131,23133,23135,23136,23137,23138,23139,23140,23141,23142,23143,23144,23145,23146,23147,23148,23149,23150,23151,23152,23153,23154,23155,23156,23157,23158,23159,23160,23161,23162,23163,23164,23165,23166,23167,23168,23169,23170,23172,23174,23175,23176,23177,23178,23179,23180,23181,23182,23770,23814,23815,23816,23817,24253],"radimus notes":[714,715],"scrawled note":[717,19511],"golden bowl":[723,724,725,726],"hollow reed":[727,728],"yommi tree seeds":[735,736],"heart crystal":[744,745],"message":[755,9633,9649,22475],"book":[757,1509,6767],"falador shield":[762,13117,13118,13119,13120],"broken shield":[763,765],"coal bag":[764,12019],"gem bag":[766,12020],"phoenix crossbow":[767,11165,11167],"certificate":[769,3114],"ardougne cloak":[770,13121,13122,13123,13124],"crest part":[779,780,781],"twigs":[789,790,791,792],"bronze dart":[806,812,5628,5635],"iron dart":[807,813,5629,5636],"steel dart":[808,814,5630,5637],"mithril dart":[809,815,5632,5639],"adamant dart":[810,816,5633,5640],"rune dart":[811,817,5634,5641],"bronze javelin":[825,831,5642,5648],"iron javelin":[826,832,5643,5649],"steel javelin":[827,833,5644,5650],"mithril javelin":[828,834,5645,5651],"adamant javelin":[829,835,5646,5652],"rune javelin":[830,836,5647,5653],"iron knife":[863,871,5655,5662],"bronze knife":[864,870,5654,5661],"steel knife":[865,872,5656,5663],"mithril knife":[866,873,5657,5664],"adamant knife":[867,875,5659,5666],"rune knife":[868,876,5660,5667],"black knife":[869,874,5658,5665],"bronze bolts":[877,878,6061,6062,9375],"opal bolts":[879,9236],"pearl bolts":[880,9238],"bronze arrow":[882,883,5616,5622,11700],"iron arrow":[884,885,5617,5623,11701],"steel arrow":[886,887,5618,5624,11702],"mithril arrow":[888,889,5619,5625,7552,11703],"adamant arrow":[890,891,5620,5626,20388],"rune arrow":[892,893,5621,5627,20600],"knife":[946,5605],"rope":[954,4498,7155,11046,20587],"flier":[956,23670],"skull":[964,965],"tile":[966,5568],"rock":[968,1480,1855,4043,4487,7533,9716,21250],"papyrus":[970,972],"white apron":[1005,7957],"blue skirt":[1011,7386,7388],"black skirt":[1015,12445,12447],"bunny ears":[1037,10734],"blue partyhat":[1042,2422],"cape of legends":[1052,8284,10635],"leather boots":[1061,6893],"iron platelegs":[1067,12227,12237],"steel platelegs":[1069,20172,20187],"mithril platelegs":[1071,12279,12289],"adamant platelegs":[1073,2601,2609,20416],"bronze platelegs":[1075,12207,12217],"black platelegs":[1077,2585,2593],"rune platelegs":[1079,2617,2625,20422],"iron plateskirt":[1081,12229,12239],"steel plateskirt":[1083,20175,20190],"mithril plateskirt":[1085,12285,12295],"bronze plateskirt":[1087,12209,12219],"black plateskirt":[1089,3472,3473],"adamant plateskirt":[1091,3474,3475],"rune plateskirt":[1093,3476,3477],"leather chaps":[1095,23384],"studded chaps":[1097,7366,7368],"green dhide chaps":[1099,7378,7380],"iron platebody":[1115,12225,12235],"bronze platebody":[1117,12205,12215],"steel platebody":[1119,20169,20184],"mithril platebody":[1121,12277,12287],"adamant platebody":[1123,2599,2607,10697,10698,20415,23392,23395,23398,23401,23404],"black platebody":[1125,2583,2591,10690,10691,23366,23369,23372,23375,23378],"rune platebody":[1127,2615,2623,10798,10800,20421,23209,23212,23215,23218,23221],"leather body":[1129,23381],"studded body":[1133,7362,7364,10680,10681],"green dhide body":[1135,7370,7372],"adamant med helm":[1145,6895],"dragon med helm":[1149,6967],"iron helm":[1153,12231,12241],"bronze helm":[1155,12211,12221],"steel helm":[1157,20178,20193],"mithril helm":[1159,12283,12293],"adamant helm":[1161,2605,2613,10296,10298,10300,10302,10304,10709,10710,10711,10712,10713,20561],"rune helm":[1163,2619,2627,10286,10288,10290,10292,10294,10704,10705,10706,10707,10708],"black helm":[1165,2587,2595,10306,10308,10310,10312,10314,10699,10700,10701,10702,10703],"wooden shield":[1171,7676,20166],"dragon sq shield":[1187,12418],"bronze kiteshield":[1189,12213,12223],"iron kiteshield":[1191,12233,12243],"steel kiteshield":[1193,8746,8748,8750,8752,8754,8756,8758,8760,8762,8764,8766,8768,8770,8772,8774,8776,20181,20196],"black kiteshield":[1195,2589,2597],"mithril kiteshield":[1197,12281,12291],"adamant kiteshield":[1199,2603,2611,6894,22127,22129,22131,22133,22135,22137,22139,22141,22143,22145,22147,22149,22151,22153,22155,22157],"rune kiteshield":[1201,2621,2629,8714,8716,8718,8720,8722,8724,8726,8728,8730,8732,8734,8736,8738,8740,8742,8744],"iron dagger":[1203,1219,5668,5686],"bronze dagger":[1205,1221,5670,5688],"steel dagger":[1207,1223,5672,5690],"mithril dagger":[1209,1225,5674,5692],"adamant dagger":[1211,1227,5676,5694],"rune dagger":[1213,1229,5678,5696],"dragon dagger":[1215,1231,5680,5698,20407],"black dagger":[1217,1233,5682,5700],"bronze spear":[1237,1251,3170,5704,5718],"iron spear":[1239,1253,3171,5706,5720],"steel spear":[1241,1255,3172,5708,5722],"mithril spear":[1243,1257,3173,5710,5724],"adamant spear":[1245,1259,3174,5712,5726],"rune spear":[1247,1261,3175,5714,5728],"dragon spear":[1249,1263,3176,5716,5730],"iron pickaxe":[1267,11721],"mithril pickaxe":[1273,11720],"rune pickaxe":[1275,11719],"rune longsword":[1303,6897],"runeh sword":[1319,20555],"rune scimitar":[1333,20402,23330,23332,23334],"rune battleaxe":[1373,20552],"ibans staff":[1409,1410,12658],"scythe":[1419,10735],"amulet of accuracy":[1478,20584],"orb of light":[1481,1482,1483,1484,23812],"paladins badge":[1488,1489,1490],"logs":[1511,2511],"map part":[1535,1536,1537],"antidragon shield":[1540,8282,11710],"pet kitten":[1555,1556,1557,1558,1559,1560],"pet cat":[1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572],"emerald":[1605,6896],"dragonstone":[1615,6903],"gold amulet":[1673,1692],"sapphire amulet":[1675,1694],"emerald amulet":[1677,1696],"ruby amulet":[1679,1698],"diamond amulet":[1681,1700],"dragonstone amulet":[1683,1702],"karamja gloves":[1686,11136,11138,11140,13103],"amulet of glory":[1704,1706,1708,1710,1712,8283,10354,10356,10358,10360,10362,10719,11964,11966,11976,11978,20586],"holy symbol":[1718,4682],"unholy symbol":[1724,4683],"amulet of magic":[1727,10366,10738],"amulet of defence":[1729,23309],"amulet of power":[1731,20585,23354],"shears":[1735,5603],"chisel":[1755,5601],"molten glass":[1775,24260],"woad leaf":[1793,5738],"bronze wire":[1794,5602],"silver necklace":[1796,1797],"silver cup":[1798,1799],"silver bottle":[1800,1801],"silver book":[1802,1803],"silver needle":[1804,1805],"silver pot":[1806,1807,4658,4660,4662,4664,4666],"criminals thread":[1808,1809,1810],"criminals dagger":[1813,1814],"waterskin":[1823,1825,1827,1829,1831],"barrel":[1841,3216],"ugthanki kebab":[1883,1885],"cake":[1891,1893],"chocolate cake":[1897,1899],"asgarnian ale":[1905,5739,5779,5781,5783,5785,5859,5861,5863,5865,7744,8241,8520],"greenmans ale":[1909,5743,5787,5789,5791,5793,5867,5869,5871,5873,7746,8242,8522],"dragon bitter":[1911,5745,5803,5805,5807,5809,5883,5885,5887,5889,7748,8243,8524],"dwarven stout":[1913,5747,5771,5773,5775,5777,5851,5853,5855,5857],"beer":[1917,7740],"beer glass":[1919,6123,7742],"bucket":[1925,8986,9660],"bucket of water":[1929,6712,9659],"pot of flour":[1933,2516],"swamp paste":[1941,22095],"grain":[1947,5607],"easter egg":[1961,7928,7929,7930,7931,7932,7933,11027,11028,11029,11030],"cabbage":[1965,1967,22519,22520],"empty cup":[1980,7728],"jug of bad wine":[1991,1992],"unfermented wine":[1995,1996],"incomplete stew":[1997,1999],"unfinished cocktail":[2042,2044,2046,2050,2052,2056,2058,2060,2062,2066,2068,2070,2072,2076,2078,2082,2086,2088,2090],"pineapple punch":[2048,9512],"wizard blizzard":[2054,9487,9489,9508],"blurberry special":[2064,9520],"choc saturday":[2074,9518],"short green guy":[2080,9510],"fruit blast":[2084,9514],"drunk dragon":[2092,9516],"odd cocktail":[2094,2096,2098,2100],"raw beef":[2132,4287],"raw chicken":[2138,4289],"cooked chicken":[2140,4291],"cooked meat":[2142,4293],"batta tin":[2164,9522,9524],"unfinished bowl":[2179,2181,2183,2189,2193,9560,9562,9564],"chocolate bomb":[2185,9553],"tangled toads legs":[2187,9551],"worm hole":[2191,9547],"veg ball":[2195,9549],"worm crunchies":[2205,9542],"unfinished crunchy":[2207,2211,2215,9578,9580,9582,9584],"chocchip crunchies":[2209,9544],"spicy crunchies":[2213,9540],"toad crunchies":[2217,9538],"unfinished batta":[2251,2257,2261,2263,2265,2267,2269,2271,2273,2275,2279,9479,9481,9484,9486],"worm batta":[2253,9531],"toad batta":[2255,9529],"cheesetom batta":[2259,9535],"fruit batta":[2277,9527],"vegetable batta":[2281,9533],"plain pizza":[2289,2291],"meat pizza":[2293,2295],"anchovy pizza":[2297,2299],"pineapple pizza":[2301,2303],"redberry pie":[2325,2333],"meat pie":[2327,2331],"palm leaf":[2339,2340],"relic part":[2373,2374,2375],"crystal":[2380,2381,2382,2383,23802],"silverlight key":[2399,2400,2401],"silverlight":[2402,6745,8279],"diary":[2408,3395,3846],"door key":[2409,9654],"magnet":[2410,3718,5604],"guthix cape":[2413,10720],"bronze key":[2418,5585,8867,19566],"wig":[2419,2421],"vorkaths head":[2425,21907,21912],"antifire potion":[2452,2454,2456,2458],"red flowers":[2462,8938],"blue flowers":[2464,8936],"blue dhide chaps":[2493,7382,7384,20418],"red dhide chaps":[2495,12329,12333,20567],"black dhide chaps":[2497,12383,12387,20424],"blue dhide body":[2499,7374,7376,20417],"red dhide body":[2501,12327,12331,20566],"black dhide body":[2503,12381,12385,20423],"dragon chainbody":[2513,3140,12414,20428],"lamp":[2528,6796],"dead orb":[2529,17152],"iron fire arrow":[2532,2533],"steel fire arrow":[2534,2535],"mithril fire arrow":[2536,2537],"adamant fire arrow":[2538,2539],"rune fire arrow":[2540,2541],"ring of dueling":[2552,2554,2556,2558,2560,2562,2564,2566],"ring of wealth":[2572,11980,11982,11984,11986,11988,12785,20786,20787,20788,20789,20790],"ranger boots":[2577,10696],"wizard boots":[2579,10689],"robin hood hat":[2581,10796],"highwayman mask":[2631,10692],"blue beret":[2633,10693],"black beret":[2635,10694],"white beret":[2637,10695],"tan cavalier":[2639,10802],"dark cavalier":[2641,10804],"black cavalier":[2643,10806],"red headband":[2645,10768],"black headband":[2647,10770],"brown headband":[2649,10772],"pirates hat":[2651,10774],"zamorak platebody":[2653,10776],"guthix platebody":[2669,10780],"puzzle box":[2795,2798,2800,3565,3567,3569,3571,3576,3578,12161,12579,12582,12585,12588,19887,19891,19895,19897,19903,19911,20280,20281,20282,23171,23173,23417],"challenge scroll":[2842,2844,2846,2850,2852,2854,7269,7271,7273,7275,7277,7279,7281,7283,7285,12056,12058,12060,12062,12064,12066,12068,12070,12072,12128,12139,12567,12569,12571,12573,12575,12577,19735,19737,19739,19741,19743,19745,19747,19749,19751,19753,19755,19757,19759,19763,19765,19767,19769,19771,19773,19847,19855,19859,19883,19885,19889,19893,19899,19901,19905,19907,19909,23132,23134],"ogre bellows":[2871,2872,2873,2874],"cooked chompy":[2878,7228],"a stone bowl":[2888,2889],"iron key":[2945,8869],"golden feather":[2950,10175],"moonlight mead":[2955,5749,5811,5813,5815,5817,5891,5893,5895,5897,7750],"druid pouch":[2957,2958,7547],"silver sickle":[2961,2963],"journal":[2967,3845,4203,6755],"chompy bird hat":[2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995],"energy potion":[3008,3010,3012,3014],"super energy":[3016,3018,3020,3022,20548,20549,20550,20551],"super restore":[3024,3026,3028,3030,23567,23569,23571,23573],"agility potion":[3032,3034,3036,3038],"magic potion":[3040,3042,3044,3046],"lava battlestaff":[3053,21198],"mystic lava staff":[3054,21200],"mime mask":[3057,10629],"black dart":[3093,3094,5631,5638],"climbing boots":[3105,20578,23413],"stone ball":[3109,3110,3111,3112,3113],"pasty jogre bones":[3128,3129,3131,3132],"marinated j bones":[3130,3133],"prison key":[3135,6966],"cell key":[3136,3137],"cooked karambwan":[3144,3147,23533],"karambwan paste":[3152,3153,3154],"karambwanji paste":[3155,3156],"karambwan vessel":[3157,3159],"monkey bones":[3179,3180,3181,3182,3183,3185,3186],"barrel bomb":[3218,3219],"naphtha mix":[3222,3223],"symbol":[3231,3233,3235,3237],"goutweed":[3261,4182],"myre snelm":[3327,3337],"bloodntar snelm":[3329,3339],"ochre snelm":[3331,3341],"bruise blue snelm":[3333,3343],"blamish myre shell":[3345,3355],"blamish red shell":[3347,3357],"blamish ochre shell":[3349,3359],"blamish blue shell":[3351,3361],"splitbark helm":[3385,10606,20568],"unfinished potion":[3406,4840,22408],"serum":[3408,3410,3412,3414,3416,3417,3418,3419],"olive oil":[3422,3424,3426,3428],"sacred oil":[3430,3432,3434,3436],"gilded platebody":[3481,10782],"shoe":[3680,3681,3682,3683,3684,3685],"enchanted lyre":[3690,3691,6125,6126,6127,13079,23458],"branch":[3692,7773],"hunters talisman":[3696,3697],"promissory note":[3709,21870],"keg of beer":[3711,3801],"red disk":[3715,3716,3743],"full bucket":[3722,4693],"sealed vase":[3738,3739,3740],"archer helm":[3749,20572],"warrior helm":[3753,20571],"farseer helm":[3755,20573],"saradomin page":[3827,3828,3829,3830],"zamorak page":[3831,3832,3833,3834],"guthix page":[3835,3836,3837,3838],"damaged book":[3839,3841,3843,12607,12609,12611],"games necklace":[3853,3855,3857,3859,3861,3863,3865,3867],"board game piece":[3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106,7107],"stool":[3893,5732],"wilderness sword":[3981,13108,13109,13110,13111],"western banner":[3983,13141,13142,13143,13144],"eye of gnome":[4008,4009],"mspeak amulet":[4021,4022],"ninja monkey greegree":[4024,4025],"zombie monkey greegree":[4029,4030],"monkey":[4033,7503,8942,19556],"saradomin banner":[4037,11891],"zamorak banner":[4039,11892],"hooded cloak":[4041,4042],"explosive potion":[4045,23818],"decorative sword":[4068,4503,4508,20483,24157],"decorative armour":[4069,4070,4504,4505,4509,4510,10610,11893,11894,11895,11896,11897,11898,11899,11900,11901,20485,20487,20493,20495,20497,20499,20501,20503,20505,24158,24159,24162,24163,24164,24165,24166,24167,24168],"decorative helm":[4071,4506,4511,20489,24160],"decorative shield":[4072,4507,4512,20491,24161],"yoyo":[4079,10733],"salve amulet":[4081,10588,12017,12018],"sled":[4083,4084],"dragon platelegs":[4087,4180,12415,20429],"mystic hat":[4089,4099,4109,10601,10602,10603,20562,23047],"mystic robe top":[4091,4101,4111,20425,23050],"mystic robe bottom":[4093,4103,4113,20426,23053],"mystic gloves":[4095,4105,4115,23056],"mystic boots":[4097,4107,4117,20579,23059],"crawling hand":[4133,7975,8260],"broad arrows":[4150,4160],"abyssal whip":[4151,4178,12773,12774,20405],"granite maul":[4153,12848,20557,24225,24227],"leafbladed spear":[4158,4159],"slayers staff":[4170,21255],"stick":[4179,9702],"extended brush":[4191,4192,4193],"decapitated head":[4197,4198,10842],"ring of charos":[4202,6465],"letter":[4204,4615,6121,6756,6757,7966,21774],"consecration seed":[4205,4206],"crystal bow":[4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,11748,11749,11750,11751,11752,11753,11754,11755,11756,11757,11758,16888,16889,23901,23902,23903,23983,23985,24123],"crystal shield":[4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,11759,11760,11761,11762,11763,11764,11765,11766,11767,11768,11769,16890,16891,23991,23993,24127],"nettle tea":[4239,4240],"porcelain cup":[4244,7732,7735],"ectophial":[4251,4252],"model ship":[4253,4254],"bonemeal":[4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4852,4853,4854,4855,5615,6728,6810,11922,22116,22754,22756,22758],"map scrap":[4274,4275,4276],"bedsheet":[4284,4285],"ham shirt":[4298,11274],"teamcape":[4315,4317,4319,4321,4323,4325,4327,4329,4331,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361,4363,4365,4367,4369,4371,4373,4375,4377,4379,4381,4383,4385,4387,4389,4391,4393,4395,4397,4399,4401,4403,4405,4407,4409,4411,4413,10638],"guthix rest":[4417,4419,4421,4423],"broken vane part":[4429,4431,4433],"antique lamp":[4447,6543,7498,11137,11139,11141,11185,11186,11187,11188,11189,11679,13145,13146,13147,13148,21262,21640,21641,21642,23072,23082],"herb tea mix":[4464,4466,4468,4470,4472,4474,4476,4478,4480,4482],"pole":[4494,4500],"castlewars hood":[4513,4515],"castlewars cloak":[4514,4516],"oil lamp":[4522,4524],"candle lantern":[4529,4531,4532,4534],"oil lantern":[4537,4539],"bullseye lantern":[4544,4546,4548,4550],"purple sweets":[4561,10476],"rubber chicken":[4566,10732,22666],"book page":[4569,4570,4571],"pages":[4572,4573],"schematic":[4575,4578],"schematics":[4576,4577],"cannon ball":[4579,7119],"black spear":[4580,4582,4584,5734,5736],"dragon plateskirt":[4585,12416],"dragon scimitar":[4587,20000,20406],"note":[4597,4598,21715],"oak blackjack":[4599,6408,6410],"willow blackjack":[4600,6412,6414],"ugthanki dung":[4601,4602],"snake basket":[4606,4607],"statuette":[4618,6785],"bandit":[4625,6781,6782],"blessed pot":[4659,4661,4663,4665,4667],"ancient staff":[4675,20431],"catspeak amulet":[4677,6544],"canopic jar":[4678,4679,4680,4681],"gold leaf":[4692,8784],"sapphire lantern":[4700,4701,4702],"magic stone":[4703,8788],"ahrims hood":[4708,4856,4857,4858,4859,4860],"ahrims staff":[4710,4862,4863,4864,4865,4866,23653],"ahrims robetop":[4712,4868,4869,4870,4871,4872,20598],"ahrims robeskirt":[4714,4874,4875,4876,4877,4878,20599],"dharoks helm":[4716,4880,4881,4882,4883,4884,23639],"dharoks greataxe":[4718,4886,4887,4888,4889,4890],"dharoks platebody":[4720,4892,4893,4894,4895,4896],"dharoks platelegs":[4722,4898,4899,4900,4901,4902,23633],"guthans helm":[4724,4904,4905,4906,4907,4908,23638],"guthans warspear":[4726,4910,4911,4912,4913,4914],"guthans platebody":[4728,4916,4917,4918,4919,4920],"guthans chainskirt":[4730,4922,4923,4924,4925,4926],"karils coif":[4732,4928,4929,4930,4931,4932],"karils crossbow":[4734,4934,4935,4936,4937,4938],"karils leathertop":[4736,4940,4941,4942,4943,4944,23632],"karils leatherskirt":[4738,4946,4947,4948,4949,4950],"torags helm":[4745,4952,4953,4954,4955,4956,23637],"torags hammers":[4747,4958,4959,4960,4961,4962],"torags platebody":[4749,4964,4965,4966,4967,4968],"torags platelegs":[4751,4970,4971,4972,4973,4974,23634],"veracs helm":[4753,4976,4977,4978,4979,4980,23636],"veracs flail":[4755,4982,4983,4984,4985,4986],"veracs brassard":[4757,4988,4989,4990,4991,4992],"veracs plateskirt":[4759,4994,4995,4996,4997,4998,23635],"sithik portrait":[4814,4815],"ogre artefact":[4818,21837],"relicyms balm":[4842,4844,4846,4848],"mining helmet":[5013,5014],"minecart ticket":[5020,5021,5022,5023],"woven top":[5024,5026,5028],"shirt":[5030,5032,5034],"trousers":[5036,5038,5040],"shorts":[5042,5044,5046],"skirt":[5048,5050,5052],"dwarf":[5054,7500],"dwarven battleaxe":[5056,5057,5058,5059,5060,5061],"bird nest":[5070,5071,5072,5073,5074,5075,7413,13653,22798,22800],"birds egg":[5076,5077,5078],"varrock armour":[5087,13104,13105,13106,13107],"morytania legs":[5093,13112,13113,13114,13115],"explorers ring":[5095,13125,13126,13127,13128],"potato seed":[5318,7548],"onion seed":[5319,7550],"tomato seed":[5322,7562],"watering can":[5331,5333,5334,5335,5336,5337,5338,5339,5340,6797],"oak seedling":[5358,5364],"willow seedling":[5359,5365],"maple seedling":[5360,5366],"yew seedling":[5361,5367],"magic seedling":[5362,5368],"spirit seedling":[5363,5369],"apples":[5378,5380,5382,5384,5386],"oranges":[5388,5390,5392,5394,5396],"strawberries":[5398,5400,5402,5404,5406],"bananas":[5408,5410,5412,5414,5416],"empty sack":[5418,10486,21873],"potatoes":[5420,5422,5424,5426,5428,5430,5432,5434,5436,5438],"onions":[5440,5442,5444,5446,5448,5450,5452,5454,5456,5458],"cabbages":[5460,5462,5464,5466,5468,5470,5472,5474,5476,5478],"apple seedling":[5480,5488],"banana seedling":[5481,5489],"orange seedling":[5482,5490],"curry seedling":[5483,5491],"pineapple seedling":[5484,5492],"papaya seedling":[5485,5493],"palm seedling":[5486,5494],"calquat seedling":[5487,5495],"medium pouch":[5510,5511],"large pouch":[5512,5513,6819],"giant pouch":[5514,5515],"scrying orb":[5518,5519],"rogue mask":[5554,10612],"gear":[5562,5563,5564,5565,5566,5567],"tiles":[5569,5570,5571],"desert amulet":[5573,13133,13134,13135,13136],"initiate hauberk":[5575,10619],"metal spade":[5586,5587],"mixture":[5589,5590,5591],"tin":[5592,5593,5594,5595,5596,5597,5598,5599,5600],"hourglass":[5610,12841],"poison dagger":[5684,5702],"axemans folly":[5751,5753,5819,5821,5823,5825,5899,5901,5903,5905],"chefs delight":[5755,5757,5827,5829,5831,5833,5907,5909,5911,5913,7754,8244,8526],"slayers respite":[5759,5761,5835,5837,5839,5841,5915,5917,5919,5921],"cider":[5763,5843,5845,5847,5849,5923,5925,5927,5929,7752],"mind bomb":[5795,5797,5799,5801,5875,5877,5879,5881],"antidote":[5942,5943,5945,5947,5949,5951,5952,5954,5956,5958],"tomatoes":[5960,5962,5964,5966,5968],"sweetcorn":[5986,7088],"marigolds":[6010,8214],"rosemary":[6014,8210],"leaves":[6020,6022,6024,6026,6028,6030],"plant cure":[6036,6468],"hay sack":[6057,6058],"spirit tree":[6063,20635],"mourner top":[6065,10621],"teleport crystal":[6099,6100,6101,6102,13102,23904],"ghostly boots":[6106,10607],"ghostly robe":[6107,6108],"square stone":[6119,6120],"rockshell helm":[6128,10613],"spined helm":[6131,10614],"skeletal helm":[6137,10604],"raw pheasant":[6178,6179,11704],"lederhosen top":[6180,10633],"princess blouse":[6186,10630],"frog mask":[6188,10721],"raw fishlike thing":[6200,6204],"fishlike thing":[6202,6206],"broodoo shield":[6215,6217,6219,6221,6223,6225,6227,6229,6231,6233,6235,6237,6239,6241,6243,6245,6247,6249,6251,6253,6255,6257,6259,6261,6263,6265,6267,6269,6271,6273,6275,6277,6279],"snake hide":[6287,7801],"spider on stick":[6293,6297],"spider on shaft":[6295,6299,6303],"snakeskin boots":[6328,20580],"tribal mask":[6335,6337,6339,10615,10616,10617],"tribal top":[6341,6351,6361,6371],"villager robe":[6343,6353,6363,6373],"villager hat":[6345,6355,6365,6375],"villager armband":[6347,6359,6369,6379],"villager sandals":[6349,6357,6367,6377],"desert top":[6384,6388],"maple blackjack":[6416,6418,6420],"kandarin headgear":[6450,13137,13138,13139,13140],"orchid seed":[6458,6459],"white tree shoot":[6461,6462,6463],"compost potion":[6470,6472,6474,6476],"agility jump":[6514,6518,11793],"agility balance":[6515,6519],"agility contortion":[6516,6520],"agility climb":[6517,6521],"toktzxilak":[6523,20554],"tzhaarketom":[6528,23235],"present":[6542,13346,13656],"lazy cat":[6549,6550,6551,6552,6553,6554],"wily cat":[6555,6556,6557,6558,6559,6560],"obsidian cape":[6568,10636,20050],"fire cape":[6570,10566,10637,20445,24223],"onyx amulet":[6579,6581],"amulet of fury":[6585,12436,23640],"white dagger":[6591,6593,6595,6597],"white platebody":[6617,10618],"hand mirror":[6639,23775],"red crystal":[6640,23776],"yellow crystal":[6641,23777],"green crystal":[6642,23778,23783],"cyan crystal":[6643,22366,23779],"blue crystal":[6644,23780],"magenta crystal":[6645,23781],"fractured crystal":[6646,6647,23784],"newly made crystal":[6651,6652],"camo top":[6654,6657,10632],"camo bottoms":[6655,6658],"camo helmet":[6656,6659],"fishing explosive":[6660,6664],"fishbowl":[6668,6669,6670,6671,6672],"guam in a box":[6677,6678],"seaweed in a box":[6679,6680],"saradomin brew":[6685,6687,6689,6691,23575,23577,23579,23581],"slayer gloves":[6708,6720],"karamthulhu":[6716,6717],"zombie head":[6722,10731,19912],"seers ring":[6731,11770,23624],"archers ring":[6733,11771],"warrior ring":[6735,11772],"berserker ring":[6737,11773,23595],"darklight":[6746,8281],"scroll":[6758,7968,9721,10485,10512],"rat pole":[6773,6774,6775,6776,6777,6778,6779],"robe of elidinis":[6786,6787],"torn robe":[6788,6789],"orb":[6821,6902],"star bauble":[6822,6823,6824,6825,6826,6827],"box bauble":[6828,6829,6830,6831,6832,6833],"diamond bauble":[6834,6835,6836,6837,6838,6839],"tree bauble":[6840,6841,6842,6843,6844,6845],"bell bauble":[6846,6847,6848,6849,6850,6851],"puppet box":[6852,6854],"bauble box":[6853,6855],"bobble hat":[6856,9815],"bobble scarf":[6857,9816],"blue marionette":[6865,6868,6875,6876,6877,6878,10730],"green marionette":[6866,6869,6879,6880,6881,6882],"red marionette":[6867,6870,6871,6872,6873,6874],"progress hat":[6885,6886,6887],"mages book":[6889,23652],"animals bones":[6904,6905,6906,6907],"beginner wand":[6908,20553],"apprentice wand":[6910,20556],"master wand":[6914,20560],"infinity top":[6916,10605,20574],"infinity bottoms":[6924,20575],"bones to peaches":[6926,8015],"magical orb":[6950,6951],"sandstone":[6971,6973,6975,6977,6985,6986],"granite":[6979,6981,6983],"stone head":[6989,6990,6991,6992,7002],"fuse":[7109,10884,10985,10986],"stripy pirate shirt":[7110,7122,7128,7134],"pirate bandana":[7112,7124,7130,7136,8949],"pirate leggings":[7116,7126,7132,7138],"canister":[7118,7149],"repair plank":[7121,7148],"dragonh sword":[7158,20559],"mud pie":[7164,7166,7170],"garden pie":[7172,7174,7178,7180],"fish pie":[7182,7184,7188,7190],"admiral pie":[7192,7194,7198],"wild pie":[7202,7204,7208,7210],"summer pie":[7212,7214,7218,7220],"red boater":[7319,10758],"orange boater":[7321,10760],"green boater":[7323,10762],"blue boater":[7325,10764],"black boater":[7327,10766],"black shield":[7332,7338,7344,7350,7356,10665,10668,10671,10674,10677],"adamant shield":[7334,7340,7346,7352,7358,10666,10669,10672,10675,10678],"rune shield":[7336,7342,7348,7354,7360,10667,10670,10673,10676,10679],"enchanted top":[7399,10688],"magic secateurs":[7409,11711],"queens secateurs":[7410,9020],"fungicide spray":[7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431],"mithril gloves":[7458,20581],"adamant gloves":[7459,20582],"rune gloves":[7460,20583],"barrows gloves":[7462,23593],"cornflour":[7463,7466],"brulee":[7473,7474,7475],"red spice":[7480,7481,7482,7483],"orange spice":[7484,7485,7486,7487],"brown spice":[7488,7489,7490,7491],"yellow spice":[7492,7493,7494,7495],"dwarven rock cake":[7509,7510],"crab meat":[7518,7519],"cooked crab meat":[7521,7523,7524,7525,7526],"diving apparatus":[7535,21723],"balloon toad":[7564,7565],"dummy":[7586,11267,11268,11269,11271],"coffin":[7587,7588,7589,7590,7591],"zombie shirt":[7592,10631],"item":[7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618],"bucket of rubble":[7622,7624,7626],"silvthrill rod":[7637,7638],"rod of ivandis":[7639,7640,7641,7642,7643,7644,7645,7646,7647,7648],"guthix balance":[7652,7654,7656,7658,7660,7662,7664,7666],"boxing gloves":[7671,7673],"pot of tea":[7692,7694,7696,7698,7704,7706,7708,7710,7716,7718,7720,7722],"teapot with leaves":[7700,7712,7724],"teapot":[7702,7714,7726],"toy soldier":[7759,7761],"toy doll":[7763,7765],"toy mouse":[7767,7769],"reward token":[7774,7775,7776,9474,10934,10935,10936,10942,10943,10944],"fishing tome":[7779,7780,7781],"agility tome":[7782,7783,7784],"thieving tome":[7785,7786,7787],"slayer tome":[7788,7789,7790],"mining tome":[7791,7792,7793],"firemaking tome":[7794,7795,7796],"woodcutting tome":[7797,7798,7799],"goblin skull":[7812,7814],"bone in vinegar":[7813,7816,7819,7822,7825,7828,7831,7834,7837,7840,7843,7846,7849,7852,7855,7858,7861,7864,7867,7870,7873,7876,7879,7882,7885,7888,7891,7894,7897,7900,7903,7906,7909,7912,7915],"bear ribs":[7815,7817],"ram skull":[7818,7820],"unicorn bone":[7821,7823],"giant rat bone":[7824,7826],"giant bat wing":[7827,7829],"wolf bone":[7830,7832],"bat wing":[7833,7835],"rat bone":[7836,7838],"baby dragon bone":[7839,7841],"ogre ribs":[7842,7844],"jogre bone":[7845,7847],"zogre bone":[7848,7850],"mogre bone":[7851,7853],"monkey paw":[7854,7856],"dagannoth ribs":[7857,7859],"snake spine":[7860,7862],"zombie bone":[7863,7865],"werewolf bone":[7866,7868],"moss giant bone":[7869,7871],"fire giant bone":[7872,7874],"ice giant ribs":[7875,7877],"terrorbird wing":[7878,7880],"ghoul bone":[7881,7883],"troll bone":[7884,7886],"seagull wing":[7887,7889],"undead cow ribs":[7890,7892],"experiment bone":[7893,7895],"rabbit bone":[7896,7898],"basilisk bone":[7899,7901],"desert lizard bone":[7902,7904],"cave goblin skull":[7905,7907],"big frog leg":[7908,7910],"vulture wing":[7911,7913],"jackal bone":[7914,7916],"easter ring":[7927,10729],"fresh monkfish":[7942,7943],"monkfish":[7946,20547],"burnt diary":[7961,7962,7963,7964,7965],"cockatrice head":[7976,8261],"basilisk head":[7977,8262],"kurask head":[7978,8263],"abyssal head":[7979,8264],"kbd heads":[7980,8265],"kq head":[7981,8266,22671],"stuffed kq head":[7988,22673],"small map":[8004,8294],"medium map":[8005,8295],"large map":[8006,8296],"wooden bed":[8031,8576],"oak bed":[8032,8578],"large oak bed":[8033,8580],"teak bed":[8034,8582],"large teak bed":[8035,8584],"shoe box":[8038,8610],"oak drawers":[8039,8612],"oak wardrobe":[8040,8614,9829],"teak drawers":[8041,8616],"teak wardrobe":[8042,8618,9831],"mahogany wardrobe":[8043,8620,9833],"gilded wardrobe":[8044,8622,9834],"shaving stand":[8045,8596],"oak shaving stand":[8046,8598],"oak dresser":[8047,8600],"teak dresser":[8048,8602],"fancy teak dresser":[8049,8604],"mahogany dresser":[8050,8606],"gilded dresser":[8051,8608],"oak clock":[8052,8590],"teak clock":[8053,8592],"gilded clock":[8054,8594],"wooden bench":[8108,8562],"oak bench":[8109,8564],"carved oak bench":[8110,8566],"teak dining bench":[8111,8568],"carved teak bench":[8112,8570],"mahogany bench":[8113,8572],"gilded bench":[8114,8574],"wood dining table":[8115,8548],"oak dining table":[8116,8550],"carved oak table":[8117,8552],"teak table":[8118,8554],"carved teak table":[8119,8556],"mahogany table":[8120,8558],"opulent table":[8121,8560],"mahogany chest":[8151,8167],"magical balance":[8156,8157,8158],"fern":[8182,8186],"thorny hedge":[8203,8437],"nice hedge":[8204,8439],"small box hedge":[8205,8441],"topiary hedge":[8206,8443],"fancy hedge":[8207,8445],"tall fancy hedge":[8208,8447],"tall box hedge":[8209,8449],"wooden shelves":[8223,8224,8225],"oak shelves":[8226,8227],"teak shelves":[8228,8229],"beer barrel":[8239,8516],"cider barrel":[8240,8518],"oak kitchen table":[8247,8530],"teak kitchen table":[8248,8532],"oak staircase":[8249,8250,8251],"teak staircase":[8252,8253,8254],"marble staircase":[8255,8256,8257],"cw armour":[8273,8274,8275],"rune case":[8276,8277,8278],"steel cage":[8299,8371],"spikes":[8302,10561],"wooden chair":[8310,8498],"rocking chair":[8311,8500],"oak chair":[8312,8502],"oak armchair":[8313,8504],"teak armchair":[8314,8506],"mahogany armchair":[8315,8508],"oak bookcase":[8320,8512],"mahogany bookcase":[8321,8514],"oak lectern":[8334,8534],"eagle lectern":[8335,8536],"demon lectern":[8336,8538],"teak eagle lectern":[8337,8540],"teak demon lectern":[8338,8542],"mahogany eagle":[8339,8544],"mahogany demon":[8340,8546],"globe":[8341,8630],"ornamental globe":[8342,8632],"lunar globe":[8343,8634],"celestial globe":[8344,8636],"armillary sphere":[8345,8638],"small orrery":[8346,8640],"large orrery":[8347,8642],"wooden telescope":[8348,8644],"teak telescope":[8349,8646],"mahogany telescope":[8350,8648],"crystal ball":[8351,8624],"elemental sphere":[8352,8626],"crystal of power":[8353,8628],"trapdoor":[8367,8368,8369,8372],"crafting table":[8380,8381,8382,8383],"tool store":[8384,8385,8386,8387,8388],"hall":[8401,8402,8403,8404],"bagged plant":[8431,8433,8435],"rune heraldic helm":[8464,8466,8468,8470,8472,8474,8476,8478,8480,8482,8484,8486,8488,8490,8492,8494],"banner":[8650,8652,8654,8656,8658,8660,8662,8664,8666,8668,8670,8672,8674,8676,8678,8680],"steel heraldic helm":[8682,8684,8686,8688,8690,8692,8694,8696,8698,8700,8702,8704,8706,8708,8710,8712],"void knight top":[8839,10611,20465,24177],"void knight robe":[8840,20469,24179],"void knight mace":[8841,20473,24181],"void knight gloves":[8842,20475,24182],"bronze defender":[8844,20449,24136],"iron defender":[8845,20451,24137],"steel defender":[8846,20453,24138],"black defender":[8847,20455,24139],"mithril defender":[8848,20457,24140],"adamant defender":[8849,20459,24141],"rune defender":[8850,20461,23230,24142],"zanik":[8870,8887,8888,8889,11062],"bone dagger":[8872,8874,8876,8878],"black mask":[8901,8903,8905,8907,8909,8911,8913,8915,8917,8919,8921,11774,11775,11776,11777,11778,11779,11780,11781,11782,11783,11784],"bandana eyepatch":[8924,8925,8926,8927],"rum":[8940,8941],"blue monkey":[8943,8944,8945],"red monkey":[8946,8947,8948],"brewin guide":[8989,8990],"skull sceptre":[9013,21276],"magic essence":[9019,9021,9022,9023,9024],"pharaohs sceptre":[9044,9046,9048,9050,13074,13075,13076,13077,13078],"emerald lantern":[9064,9065,20722],"moonclan hat":[9069,10608],"astral rune":[9075,11699],"kindling":[9094,20799],"lunar helm":[9096,10609],"blurite bolts":[9139,9286,9293,9300,9376],"iron bolts":[9140,9287,9294,9301,9377],"steel bolts":[9141,9288,9295,9302,9378],"mithril bolts":[9142,9289,9296,9303,9379],"adamant bolts":[9143,9290,9297,9304,9380],"runite bolts":[9144,9291,9298,9305,9381],"silver bolts":[9145,9292,9299,9306,9382],"bronze crossbow":[9174,9454],"blurite crossbow":[9176,9456],"iron crossbow":[9177,9457],"steel crossbow":[9179,9459],"adamant crossbow":[9183,9463],"rune crossbow":[9185,23601],"jade bolts":[9237,9335],"topaz bolts":[9239,9336],"sapphire bolts":[9240,9337],"emerald bolts":[9241,9338],"ruby bolts":[9242,9339],"diamond bolts":[9243,9340,23649],"dragonstone bolts":[9244,9341],"onyx bolts":[9245,9342],"mith grapple":[9418,9419],"half made batta":[9478,9480,9482,9483,9485],"half made bowl":[9558,9559,9561,9563],"mixed saturday":[9571,9572,9573],"mixed dragon":[9574,9575,9576],"half made crunchy":[9577,9579,9581,9583],"dossier":[9589,9590],"castle sketch":[9646,9647,9648],"tome of experience":[9656,9657,9658,22415],"useless key":[9662,16684],"proselyte sallet":[9672,20563],"proselyte hauberk":[9674,10620,20564],"proselyte cuisse":[9676,20565],"page":[9684,9685,9686],"fragment":[9687,9688,9689],"pipe":[9723,10871],"combat potion":[9739,9741,9743,9745],"attack cape":[9747,9748,10639],"strength cape":[9750,9751,10640],"defence cape":[9753,9754,10641],"ranging cape":[9756,9757,10642],"prayer cape":[9759,9760,10643],"magic cape":[9762,9763,10644],"runecraft cape":[9765,9766,10645],"hitpoints cape":[9768,9769,10647],"agility cape":[9771,9772,10648,13340,13341],"herblore cape":[9774,9775,10649],"thieving cape":[9777,9778,10650],"crafting cape":[9780,9781,10651],"fletching cape":[9783,9784,10652],"slayer cape":[9786,9787,10653],"construct cape":[9789,9790,10654],"mining cape":[9792,9793,10655],"smithing cape":[9795,9796,10656],"fishing cape":[9798,9799,10657],"cooking cape":[9801,9802,10658],"firemaking cape":[9804,9805,10659],"woodcutting cape":[9807,10660],"farming cape":[9810,9811,10661],"quest point cape":[9813,10662,13068],"oak cape rack":[9817,9843],"teak cape rack":[9818,9844],"mahogany cape rack":[9819,9845],"gilded cape rack":[9820,9846],"marble cape rack":[9821,9847],"oak armour case":[9826,9859],"teak armour case":[9827,9860],"mahogany armour case":[9828,9861],"oak toy box":[9836,9849],"teak toy box":[9837,9850],"mahogany toy box":[9838,9851],"oak treasure chest":[9839,9862],"teak treasure chest":[9840,9863],"ghost buster":[9906,9907,9908,9909,9910,9911,9912],"jack lantern mask":[9920,10723],"skeleton boots":[9921,10724],"skeleton gloves":[9922,10725],"skeleton leggings":[9923,10726],"skeleton shirt":[9924,10727],"skeleton mask":[9925,10728],"bomber jacket":[9944,11135],"hunter cape":[9948,9949,10646],"kebbit":[9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964],"butterfly":[9970,9971,9972,9973],"chinchompa":[9976,10033],"red chinchompa":[9977,10034],"hunter potion":[9998,10000,10002,10004],"falconers glove":[10023,10024],"impinabox":[10027,10028],"kyatt top":[10037,10622],"larupia top":[10043,10623],"graahk top":[10049,10624],"wood camo top":[10053,10625],"jungle camo top":[10057,10626],"desert camo top":[10061,10627],"polar camo top":[10065,10628],"spotted cape":[10069,10073,10663],"spottier cape":[10071,10074,10664],"bobs red shirt":[10316,10714],"bobs blue shirt":[10318,10715],"bobs green shirt":[10320,10716],"bobs black shirt":[10322,10717],"bobs purple shirt":[10324,10718],"3rd age robe top":[10338,20576],"3rd age robe":[10340,20577],"strength amulet":[10364,10736],"zamorak dhide":[10370,10790],"saradomin dhide":[10386,10792],"a powdered wig":[10392,10740],"flared trousers":[10394,10742],"pantaloons":[10396,10744],"sleeping cap":[10398,10746],"black elegant shirt":[10400,10748],"red elegant shirt":[10404,10750],"blue elegant shirt":[10408,10752],"green elegant shirt":[10412,10754],"purple elegant shirt":[10416,10756],"saradomin robe top":[10458,10784],"zamorak robe top":[10460,10786],"guthix robe top":[10462,10788],"avas accumulator":[10499,23609],"reindeer hat":[10507,10722],"fremennik sea boots":[10510,13129,13130,13131,13132],"attacker horn":[10516,10517,10518,10519,10520],"collection bag":[10521,10522,10523,10524,10525],"healer horn":[10526,10527,10528,10529,10530],"healing vial":[10542,10543,10544,10545,10546],"healer hat":[10547,20511,24172],"fighter hat":[10548,20507,24173],"ranger hat":[10550,20509,24174],"fighter torso":[10551,20513,24175],"penance gloves":[10553,10554],"penance skirt":[10555,20515,24176],"attacker icon":[10556,22346,22347,22348,22349,22721,22722,22723,22729,22730,23460,23461,23462,23463,23464,23465],"collector icon":[10557,22312,22313,22314,22315,22337,22338,22339,22724,23471,23472,23473,23474,23475,23476,23477],"defender icon":[10558,22340,22341,22342,22343,22344,22345,22725,22726,22727,22728,23466,23467,23468,23469,23470],"healer icon":[10559,10567,20802,22308,22309,22310,22311,23478,23479,23480,23481,23482,23483,23484,23485,23486],"keris":[10581,10582,10583,10584],"parchment":[10585,11036],"clockwork suit":[10595,10596],"mission report":[10597,10598,10599],"dhide body":[10682,10683,10684,10685],"wizard robe":[10686,10687],"yakhide armour":[10822,10824],"helm of neitiznot":[10828,23591],"hard hat":[10862,10883],"keg":[10885,10898],"prayer book":[10886,10890],"barrelchest anchor":[10887,10888],"mixture step":[10909,10911,10913,10915,10917,10919,10921,10923],"sanfew serum":[10925,10927,10929,10931,23559,23561,23563,23565],"lumberjack top":[10939,10945],"skull staples":[10950,10951],"cog":[10983,10984],"meter":[10987,10988],"capacitor":[10989,10990],"powerbox":[10993,10994],"chicken head":[11015,11021],"chicken feet":[11016,11019],"chicken wings":[11017,11020],"chicken legs":[11018,11022],"rotten barrel":[11044,11045],"artefact":[11049,11051,11053,11055,11057,11059],"gold bracelet":[11068,11069],"sapphire bracelet":[11071,11072],"emerald bracelet":[11076,11078],"castle wars bracelet":[11079,11081,11083],"ruby bracelet":[11085,11087],"diamond bracelet":[11092,11094],"abyssal bracelet":[11095,11097,11099,11101,11103],"skills necklace":[11105,11107,11109,11111,11113,11968,11970],"combat bracelet":[11118,11120,11122,11124,11126,11972,11974],"berserker necklace":[11128,23240],"onyx bracelet":[11130,11132],"dream vial":[11151,11152,11153],"newspaper":[11169,11171],"half certificate":[11173,11174],"digsite pendant":[11190,11191,11192,11193,11194],"dragon arrow":[11212,11227,11228,11229,20389],"dragon fire arrow":[11217,11222],"dragon dart":[11230,11231,11233,11234],"dark bow":[11235,12765,12766,12767,12768,20408],"cavalier mask":[11277,11280],"beret mask":[11278,11282],"dragonfire shield":[11283,11284],"dragon helm":[11335,12417],"ancient page":[11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365,11366,12621,12622,12623,12624],"bronze hasta":[11367,11379,11381,11382,11384],"iron hasta":[11369,11386,11388,11389,11391],"steel hasta":[11371,11393,11395,11396,11398],"mithril hasta":[11373,11400,11402,11403,11405],"adamant hasta":[11375,11407,11409,11410,11412],"rune hasta":[11377,11414,11416,11417,11419],"fish vial":[11427,11428],"attack mix":[11429,11431],"antipoison mix":[11433,11435],"relicyms mix":[11437,11439],"strength mix":[11441,11443],"combat mix":[11445,11447],"restore mix":[11449,11451],"energy mix":[11453,11455],"defence mix":[11457,11459],"agility mix":[11461,11463],"prayer mix":[11465,11467],"superattack mix":[11469,11471],"antipoison supermix":[11473,11475],"fishing mix":[11477,11479],"super energy mix":[11481,11483],"super str mix":[11485,11487],"magic essence mix":[11489,11491],"super restore mix":[11493,11495],"super def mix":[11497,11499],"antidote mix":[11501,11503],"antifire mix":[11505,11507],"ranging mix":[11509,11511],"magic mix":[11513,11515],"hunting mix":[11517,11519],"zamorak mix":[11521,11523],"void mage helm":[11663,11674,20477,24183],"void ranger helm":[11664,11675,20479,24184],"void melee helm":[11665,11676,20481,24185],"void seal":[11666,11667,11668,11669,11670,11671,11672,11673],"beach boxing gloves":[11705,11706],"super ranging":[11722,11723,11724,11725],"super magic potion":[11726,11727,11728,11729],"overload":[11730,11731,11732,11733,20985,20986,20987,20988,20989,20990,20991,20992,20993,20994,20995,20996],"absorption":[11734,11735,11736,11737],"armadyl crossbow":[11785,23611],"steam battlestaff":[11787,12795],"mystic steam staff":[11789,12796],"staff of the dead":[11791,23613],"godsword shards":[11794,11796,11800],"armadyl godsword":[11802,20368,20593,22665],"bandos godsword":[11804,20370,20782,21060],"saradomin godsword":[11806,20372],"zamorak godsword":[11808,20374],"godsword shard":[11818,11820,11822],"bandos tassets":[11834,23646],"dragon boots":[11840,22234],"knights notes":[11842,11843],"graceful hood":[11850,11851,13579,13580,13591,13592,13603,13604,13615,13616,13627,13628,13667,13668,21061,21063],"graceful cape":[11852,11853,13581,13582,13593,13594,13605,13606,13617,13618,13629,13630,13669,13670,21064,21066],"graceful top":[11854,11855,13583,13584,13595,13596,13607,13608,13619,13620,13631,13632,13671,13672,21067,21069],"graceful legs":[11856,11857,13585,13586,13597,13598,13609,13610,13621,13622,13633,13634,13673,13674,21070,21072],"graceful gloves":[11858,11859,13587,13588,13599,13600,13611,13612,13623,13624,13635,13636,13675,13676,21073,21075],"graceful boots":[11860,11861,13589,13590,13601,13602,13613,13614,13625,13626,13637,13638,13677,13678,21076,21078],"slayer helmet":[11864,11865,19639,19641,19643,19645,19647,19649,21264,21266,21888,21890,23073,23075],"slayer ring":[11866,11867,11868,11869,11870,11871,11872,11873,21268],"trident":[11905,11907,11908,22288,22290],"box of chocolate strawberries":[11912,11914],"dragon pickaxe":[11920,12797,23677],"malediction ward":[11924,12806],"odium ward":[11926,12807],"odium shard":[11928,11929,11930],"malediction shard":[11931,11932,11933],"looting bag":[11941,22586],"extended antifire":[11951,11953,11955,11957],"extended antifire mix":[11960,11962],"occult necklace":[12002,19720,23654],"soft clay pack":[12009,12010],"black wizard robe":[12449,12451],"black wizard hat":[12453,12455],"ring of the gods":[12601,13202],"tyrannical ring":[12603,12691],"treasonous ring":[12605,12692],"bandos page":[12613,12614,12615,12616],"armadyl page":[12617,12618,12619,12620],"stamina potion":[12625,12627,12629,12631,23583,23585,23587,23589],"stamina mix":[12633,12635],"saradomin halo":[12637,20537,24169],"zamorak halo":[12638,20539,24170],"guthix halo":[12639,20541,24171],"kalphite princess":[12647,12654],"pet smoke devil":[12648,22663],"junk":[12656,12657],"clan wars cape":[12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,12687,12688,12689,12690,21396,21397,21398,21399,21400,21401,21402,21403,21404,21405,21406,21407,21408,21409,21410,21411,21412,21413,21414,21415,21416,21417,21418,21419,21420,21421,21422,21423,21424,21425,21426,21427],"super combat potion":[12695,12697,12699,12701,23543,23545,23547,23549],"menagerie":[12725,12726],"archaic emblem":[12746,12747,12748,12749,12750,12751,12752,12753,12754,12755,12756,23487],"rune pouch":[12791,23650],"nest box":[12792,12793,12794,13654,23062],"elysian spirit shield":[12817,19559],"spirit shield":[12829,23599],"blessed spirit shield":[12831,23642],"amulet of the damned":[12851,12853],"thanksgiving dinner":[12861,12862],"antisantas coal box":[12897,12898],"toxic trident":[12899,12900,22292,22294],"toxic staff":[12902,12904],"antivenom":[12905,12907,12909,12911,12913,12915,12917,12919],"pet snakeling":[12921,12939,12940],"toxic blowpipe":[12924,12926],"serpentine helm":[12929,12931,13196,13197,13198,13199],"dragon defender":[12954,19722,20463,23597,24143],"bronze set":[12960,12962],"bronze trimmed set":[12964,12966],"bronze goldtrimmed set":[12968,12970],"iron set":[12972,12974],"iron trimmed set":[12976,12978],"iron goldtrimmed set":[12980,12982],"steel set":[12984,12986],"black set":[12988,12990],"black trimmed set":[12992,12994],"black goldtrimmed set":[12996,12998],"mithril set":[13000,13002],"mithril trimmed set":[13004,13006],"mithril goldtrimmed set":[13008,13010],"adamant set":[13012,13014],"adamant trimmed set":[13016,13018],"adamant goldtrimmed set":[13020,13022],"rune armour set":[13024,13026],"rune trimmed set":[13028,13030],"rune goldtrimmed set":[13032,13034],"gilded armour set":[13036,13038],"saradomin armour set":[13040,13042],"zamorak armour set":[13044,13046],"guthix armour set":[13048,13050],"armadyl rune armour set":[13052,13054],"bandos rune armour set":[13056,13058],"ancient rune armour set":[13060,13062],"achievement diary cape":[13069,19476],"elite void top":[13072,20467,24178],"elite void robe":[13073,20471,24180],"crystal halberd":[13080,13081,13082,13083,13084,13085,13086,13087,13088,13089,13090,13091,13092,13093,13094,13095,13096,13097,13098,13099,13100,13101,16892,16893,23895,23896,23897,23987,23989,24125],"vetion jr":[13179,13180],"old school bond":[13190,13192],"music cape":[13221,13222,13224],"eternal boots":[13235,23644],"infernal axe":[13241,13242],"infernal pickaxe":[13243,13244],"abyssal dagger":[13265,13267,13269,13271],"max cape":[13280,13282,13342],"bank key":[13302,13303,13304,13305,13306],"deadmans chest":[13317,24189],"deadmans legs":[13318,24190],"deadmans cape":[13319,24191],"rock golem":[13321,21187,21188,21189,21190,21191,21192,21193,21194,21195,21196,21197,21340,21358,21359,21360],"baby chinchompa":[13323,13324,13325,13326],"fire max cape":[13329,20447,21186,24134],"vial of tears":[13347,13348,13349,13350,13351],"shayzien gloves":[13357,13362,13367,13372,13377],"shayzien boots":[13358,13363,13368,13373,13378],"shayzien helm":[13359,13364,13369,13374,13379],"shayzien greaves":[13360,13365,13370,13375,13380],"shayzien platebody":[13361,13366,13371,13376,13381],"xerics talisman":[13392,13393],"servery incomplete stew":[13415,13416],"ensouled goblin head":[13447,13448],"ensouled monkey head":[13450,13451],"ensouled imp head":[13453,13454],"ensouled minotaur head":[13456,13457],"ensouled scorpion head":[13459,13460],"ensouled bear head":[13462,13463],"ensouled unicorn head":[13465,13466],"ensouled dog head":[13468,13469],"ensouled chaos druid head":[13471,13472],"ensouled giant head":[13474,13475],"ensouled ogre head":[13477,13478],"ensouled elf head":[13480,13481],"ensouled troll head":[13483,13484],"ensouled horror head":[13486,13487],"ensouled kalphite head":[13489,13490],"ensouled dagannoth head":[13492,13493],"ensouled bloodveld head":[13495,13496],"ensouled tzhaar head":[13498,13499],"ensouled demon head":[13501,13502],"ensouled aviansie head":[13504,13505],"ensouled abyssal head":[13507,13508],"ensouled dragon head":[13510,13511],"dark manuscript":[13514,13515,13516,13517,13518,13519,13520,13521,13522,13523],"shayzien supply gloves":[13538,13543,13548,13553,13558],"shayzien supply boots":[13539,13544,13549,13554,13559],"shayzien supply helm":[13540,13545,13550,13555,13560],"shayzien supply greaves":[13541,13546,13551,13556,13561],"shayzien supply platebody":[13542,13547,13552,13557,13562],"shayzien supply set":[13565,13566,13567,13568,13569],"dragon warhammer":[13576,20785],"farmers boro trousers":[13640,13641],"farmers boots":[13644,13645],"farmers strawhat":[13646,13647,21253,21254],"clue bottle":[13648,13649,13650,13651,23129],"dragon claws":[13652,20784],"heavy ballista":[19481,23630],"dragon javelin":[19484,19486,19488,19490,23648],"zenyte bracelet":[19492,19532],"zenyte amulet":[19501,19541],"mysterious note":[19505,19507,19509],"satchel":[19527,19528],"tormented bracelet":[19544,23444],"necklace of anguish":[19547,22249],"ring of suffering":[19550,19710,20655,20657],"amulet of torture":[19553,20366],"botanical pie":[19659,19662],"clue nest":[19712,19714,19716,19718,23127],"reward casket":[19836,20543,20544,20545,20546,23245],"torn clue scroll":[19837,19838,19839],"strange device":[19939,23183],"bucket helm":[19991,20059],"gnomish firelighter":[20275,20278],"clue geode":[20358,20360,20362,20364,23442],"steel trimmed set":[20376,20379],"steel goldtrimmed set":[20382,20385],"stash units":[20532,20533,20534,20535,20536,23416],"dark altar":[20619,22778],"occult altar":[20620,20621,20622],"rift guardian":[20665,20667,20669,20671,20673,20675,20677,20679,20681,20683,20685,20687,20689,20691,21990],"rejuvenation potion":[20697,20699,20700,20701,20702],"tome of fire":[20714,20716],"manor key":[20766,21052],"ruby key":[20767,21053],"emerald key":[20768,21054],"sapphire key":[20769,21055],"killers knife":[20781,21059],"corrupted helm":[20838,23840,23841,23842],"dragon thrownaxe":[20849,21207],"elder":[20913,20914,20915,20916,20921,20922,20923,20924],"elder potion":[20917,20918,20919,20920],"twisted":[20925,20926,20927,20928,20933,20934,20935,20936],"twisted potion":[20929,20930,20931,20932],"kodai":[20937,20938,20939,20940,20945,20946,20947,20948],"kodai potion":[20941,20942,20943,20944],"revitalisation":[20949,20950,20951,20952,20957,20958,20959,20960],"revitalisation potion":[20953,20954,20955,20956,22096],"prayer enhance":[20961,20962,20963,20964,20965,20966,20967,20968,20969,20970,20971,20972],"xerics aid":[20973,20974,20975,20976,20977,20978,20979,20980,20981,20982,20983,20984],"elder maul":[21003,21205],"kodai wand":[21006,23626],"dragon sword":[21009,21206],"infernal harpoon":[21031,21033],"medium storage unit":[21038,21040],"large storage unit":[21039,21041,21042],"opal amulet":[21099,21108],"jade amulet":[21102,21111],"topaz amulet":[21105,21114],"ring of returning":[21129,21132,21134,21136,21138],"necklace of passage":[21146,21149,21151,21153,21155],"burning amulet":[21166,21169,21171,21173,21175],"mysterious orb":[21261,23069],"infernal max cape":[21284,21285,21289,24133],"infernal cape":[21287,21295,21297,23622,24224],"amethyst javelin":[21318,21320,21322,21324],"amethyst arrow":[21326,21332,21334,21336],"amethyst fire arrow":[21328,21330],"master scroll book":[21387,21389],"wilderness cape":[21428,21429,21430,21431,21432,21434,21435,21436,21437,21438],"teak seedling":[21469,21473],"mahogany seedling":[21471,21475],"fossil island wyvern":[21507,21508],"ancient wyvern shield":[21633,21634],"mushroom pie":[21687,21690],"jonas mask":[21719,21720],"granite ring":[21739,21752],"imbued saradomin max cape":[21776,24232,24238],"imbued zamorak max cape":[21780,24233,24246],"imbued guthix max cape":[21784,24234,24242],"imbued saradomin cape":[21791,23607,24236,24248],"imbued guthix cape":[21793,23603,24240,24249],"imbued zamorak cape":[21795,23605,24244,24250],"bracelet of ethereum":[21816,21817],"snow imp costume head":[21841,21847],"snow imp costume body":[21842,21849],"snow imp costume legs":[21843,21851],"snow imp costume tail":[21844,21853],"snow imp costume gloves":[21845,21855],"snow imp costume feet":[21846,21857],"santa suit":[21866,21867,21868],"wrath rune":[21880,22208],"dragon armour set":[21882,21885],"dragon platebody":[21892,22242],"dragon kiteshield":[21895,22244],"assembler max cape":[21898,21916,24135],"dragon crossbow":[21902,21921],"dragon bolts":[21905,21924,21926,21928,21930],"mythical cape":[21913,22114],"avas assembler":[21914,22109,24222],"opal dragon bolts":[21932,21955],"jade dragon bolts":[21934,21957],"pearl dragon bolts":[21936,21959],"topaz dragon bolts":[21938,21961],"sapphire dragon bolts":[21940,21963],"emerald dragon bolts":[21942,21965],"ruby dragon bolts":[21944,21967],"diamond dragon bolts":[21946,21969],"dragonstone dragon bolts":[21948,21971],"onyx dragon bolts":[21950,21973],"super antifire potion":[21978,21981,21984,21987],"super antifire mix":[21994,21997],"dragonfire ward":[22002,22003],"map piece":[22009,22010,22011,22012,22013,22014,22015,22016,22017,22018,22019,22020,22021,22022,22023,22024,22025,22026,22027,22028,22029,22030,22031,22032],"old notes":[22051,22053,22055,22057,22059,22061,22063,22065,22067,22069,22071,22073,22075,22077,22410,22774,23023,23025,23027,23029,23031,23033,23035],"dragon key":[22087,22092],"dragon key piece":[22088,22089,22090,22091],"adamant heraldic helm":[22159,22161,22163,22165,22167,22169,22171,22173,22175,22177,22179,22181,22183,22185,22187,22189],"extended super antifire":[22209,22212,22215,22218],"extended super antifire mix":[22221,22224],"avernic defender":[22322,22441,24186],"sanguinesti staff":[22323,22481],"ghrazi rapier":[22324,23628],"scythe of vitur":[22325,22486,22664],"bryophytas staff":[22368,22370],"vial of blood":[22405,22446],"battlemage potion":[22449,22452,22455,22458],"bastion potion":[22461,22464,22467,22470],"sinhaza shroud tier":[22494,22496,22498,22500,22502],"coin pouch":[22521,22522,22523,22524,22525,22526,22527,22528,22529,22530,22531,22532,22533,22534,22535,22536,22537,22538],"viggoras chainmace":[22542,22545],"craws bow":[22547,22550],"thammarons sceptre":[22552,22555],"vestas longsword":[22613,23615],"statiuss warhammer":[22622,23620],"morrigans javelin":[22636,23619],"zuriels staff":[22647,23617],"dragon hasta":[22731,22734,22737,22740,22743],"ikkle hydra":[22746,22748,22750,22752],"energy disk":[22765,22766,22767,22768],"unknown fluid":[22769,22770,22771,22772,22773],"dragonfruit pie":[22792,22795],"radas blessing":[22803,22941,22943,22945,22947],"dragon knife":[22804,22806,22808,22810,22812,22814],"cormorants glove":[22816,22817],"celastrus seedling":[22848,22852],"redwood seedling":[22850,22854],"dragonfruit seedling":[22862,22864],"bottomless compost bucket":[22994,22997],"bottled dragonbreath":[22999,23002],"treasure scroll":[23067,23068,23070],"mystic set":[23110,23113,23116,23119],"rune scimitar ornament kit":[23321,23324,23327],"giant egg sac":[23517,23520],"crystal seedling":[23655,23657],"crystal axe":[23673,23675,23862],"crystal pickaxe":[23680,23682,23863],"divine super combat potion":[23685,23688,23691,23694],"divine super attack potion":[23697,23700,23703,23706],"divine super strength potion":[23709,23712,23715,23718],"divine super defence potion":[23721,23724,23727,23730],"divine ranging potion":[23733,23736,23739,23742],"divine magic potion":[23745,23748,23751,23754],"crystal harpoon":[23762,23764,23864],"crystal dust":[23804,23867,23964],"crystal seed":[23808,23810],"weapon frame":[23834,23871],"grym leaf":[23835,23875],"linum tirinum":[23836,23876],"phren bark":[23838,23878],"corrupted body":[23843,23844,23845],"corrupted legs":[23846,23847,23848],"corrupted halberd":[23849,23850,23851],"corrupted staff":[23852,23853,23854],"corrupted bow":[23855,23856,23857],"egniol potion":[23882,23883,23884,23885],"crystal helm":[23886,23887,23888,23971,23973],"crystal body":[23889,23890,23891,23975,23977],"crystal legs":[23892,23893,23894,23979,23981],"crystal staff":[23898,23899,23900],"crystal crown":[23911,23913,23915,23917,23919,23921,23923,23925],"blade of saeldor":[23995,23997],"elven top":[24009,24015,24021,24027],"elven skirt":[24012,24018],"memoriam crystal":[24030,24031,24032,24033],"armadyl halo":[24147,24192,24194],"bandos halo":[24149,24195,24197],"seren halo":[24151,24198,24200],"ancient halo":[24153,24201,24203],"brassica halo":[24155,24204,24206],"victors cape":[24207,24209,24211,24213,24215],"unsealed letter":[24256,24257],"v sigil":[24258,24259],"vs shield":[24265,24266],"mysterious emblem":[24277,24279,24281,24283,24285]} \ No newline at end of file diff --git a/runelite-client/src/test/java/net/runelite/client/util/QuantityFormatterTest.java b/runelite-client/src/test/java/net/runelite/client/util/QuantityFormatterTest.java new file mode 100644 index 0000000000..27ee40c41e --- /dev/null +++ b/runelite-client/src/test/java/net/runelite/client/util/QuantityFormatterTest.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2018, arlyon + * 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 java.text.ParseException; +import java.util.Locale; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import org.junit.Before; +import org.junit.Test; + +public class QuantityFormatterTest +{ + @Before + public void setUp() + { + Locale.setDefault(Locale.ENGLISH); + } + + @Test + public void quantityToRSDecimalStackSize() + { + assertEquals("0", QuantityFormatter.quantityToRSDecimalStack(0)); + assertEquals("8500", QuantityFormatter.quantityToRSDecimalStack(8_500)); + assertEquals("10K", QuantityFormatter.quantityToRSDecimalStack(10_000)); + assertEquals("21.7K", QuantityFormatter.quantityToRSDecimalStack(21_700)); + assertEquals("100K", QuantityFormatter.quantityToRSDecimalStack(100_000)); + assertEquals("100.3K", QuantityFormatter.quantityToRSDecimalStack(100_300)); + assertEquals("1M", QuantityFormatter.quantityToRSDecimalStack(1_000_000)); + assertEquals("8.4M", QuantityFormatter.quantityToRSDecimalStack(8_450_000)); + assertEquals("10M", QuantityFormatter.quantityToRSDecimalStack(10_000_000)); + assertEquals("12.8M", QuantityFormatter.quantityToRSDecimalStack(12_800_000)); + assertEquals("100M", QuantityFormatter.quantityToRSDecimalStack(100_000_000)); + assertEquals("250.1M", QuantityFormatter.quantityToRSDecimalStack(250_100_000)); + assertEquals("1B", QuantityFormatter.quantityToRSDecimalStack(1_000_000_000)); + assertEquals("1.5B", QuantityFormatter.quantityToRSDecimalStack(1500_000_000)); + assertEquals("2.1B", QuantityFormatter.quantityToRSDecimalStack(Integer.MAX_VALUE)); + } + + @Test + public void quantityToStackSize() + { + assertEquals("0", QuantityFormatter.quantityToStackSize(0)); + assertEquals("999", QuantityFormatter.quantityToStackSize(999)); + assertEquals("1,000", QuantityFormatter.quantityToStackSize(1000)); + assertEquals("9,450", QuantityFormatter.quantityToStackSize(9450)); + assertEquals("14.5K", QuantityFormatter.quantityToStackSize(14_500)); + assertEquals("99.9K", QuantityFormatter.quantityToStackSize(99_920)); + assertEquals("100K", QuantityFormatter.quantityToStackSize(100_000)); + assertEquals("10M", QuantityFormatter.quantityToStackSize(10_000_000)); + assertEquals("2.14B", QuantityFormatter.quantityToStackSize(Integer.MAX_VALUE)); + assertEquals("100B", QuantityFormatter.quantityToStackSize(100_000_000_000L)); + + assertEquals("0", QuantityFormatter.quantityToStackSize(-0)); + assertEquals("-400", QuantityFormatter.quantityToStackSize(-400)); + assertEquals("-400K", QuantityFormatter.quantityToStackSize(-400_000)); + assertEquals("-40M", QuantityFormatter.quantityToStackSize(-40_000_000)); + assertEquals("-2.14B", QuantityFormatter.quantityToStackSize(Integer.MIN_VALUE)); + assertEquals("-400B", QuantityFormatter.quantityToStackSize(-400_000_000_000L)); + } + + @Test + public void quantityToPreciseStackSize() + { + assertEquals("0", QuantityFormatter.quantityToRSDecimalStack(0)); + assertEquals("8500", QuantityFormatter.quantityToRSDecimalStack(8_500, true)); + assertEquals("10K", QuantityFormatter.quantityToRSDecimalStack(10_000, true)); + assertEquals("21.7K", QuantityFormatter.quantityToRSDecimalStack(21_710, true)); + assertEquals("100K", QuantityFormatter.quantityToRSDecimalStack(100_000, true)); + assertEquals("100.3K", QuantityFormatter.quantityToRSDecimalStack(100_310, true)); + assertEquals("1M", QuantityFormatter.quantityToRSDecimalStack(1_000_000, true)); + assertEquals("8.45M", QuantityFormatter.quantityToRSDecimalStack(8_450_000, true)); + assertEquals("8.451M", QuantityFormatter.quantityToRSDecimalStack(8_451_000, true)); + assertEquals("10M", QuantityFormatter.quantityToRSDecimalStack(10_000_000, true)); + assertEquals("12.8M", QuantityFormatter.quantityToRSDecimalStack(12_800_000, true)); + assertEquals("12.85M", QuantityFormatter.quantityToRSDecimalStack(12_850_000, true)); + assertEquals("12.851M", QuantityFormatter.quantityToRSDecimalStack(12_851_000, true)); + assertEquals("100M", QuantityFormatter.quantityToRSDecimalStack(100_000_000, true)); + assertEquals("250.1M", QuantityFormatter.quantityToRSDecimalStack(250_100_000, true)); + assertEquals("250.151M", QuantityFormatter.quantityToRSDecimalStack(250_151_000, true)); + assertEquals("1B", QuantityFormatter.quantityToRSDecimalStack(1_000_000_000, true)); + assertEquals("1.5B", QuantityFormatter.quantityToRSDecimalStack(1500_000_000, true)); + assertEquals("1.55B", QuantityFormatter.quantityToRSDecimalStack(1550_000_000, true)); + assertEquals("2.147B", QuantityFormatter.quantityToRSDecimalStack(Integer.MAX_VALUE, true)); + } + + @Test + public void stackSizeToQuantity() throws ParseException + { + assertEquals(0, QuantityFormatter.parseQuantity("0")); + assertEquals(907, QuantityFormatter.parseQuantity("907")); + assertEquals(1200, QuantityFormatter.parseQuantity("1200")); + assertEquals(10_500, QuantityFormatter.parseQuantity("10,500")); + assertEquals(10_500, QuantityFormatter.parseQuantity("10.5K")); + assertEquals(33_560_000, QuantityFormatter.parseQuantity("33.56M")); + assertEquals(2_000_000_000, QuantityFormatter.parseQuantity("2B")); + + assertEquals(0, QuantityFormatter.parseQuantity("-0")); + assertEquals(-400, QuantityFormatter.parseQuantity("-400")); + assertEquals(-400_000, QuantityFormatter.parseQuantity("-400k")); + assertEquals(-40_543_000, QuantityFormatter.parseQuantity("-40.543M")); + + try + { + QuantityFormatter.parseQuantity("0L"); + fail("Should have thrown an exception for invalid suffix."); + } + catch (ParseException ignore) + { + } + + try + { + QuantityFormatter.parseQuantity("badstack"); + fail("Should have thrown an exception for improperly formatted stack."); + } + catch (ParseException ignore) + { + } + } +} diff --git a/runelite-client/src/test/java/net/runelite/client/util/StackFormatterTest.java b/runelite-client/src/test/java/net/runelite/client/util/StackFormatterTest.java deleted file mode 100644 index 1e297a8513..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/util/StackFormatterTest.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) 2018, arlyon - * 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 java.text.ParseException; -import java.util.Locale; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; -import org.junit.Before; -import org.junit.Test; - -public class StackFormatterTest -{ - @Before - public void setUp() - { - Locale.setDefault(Locale.ENGLISH); - } - - @Test - public void quantityToRSDecimalStackSize() - { - assertEquals("0", StackFormatter.quantityToRSDecimalStack(0)); - assertEquals("8500", StackFormatter.quantityToRSDecimalStack(8_500)); - assertEquals("10K", StackFormatter.quantityToRSDecimalStack(10_000)); - assertEquals("21.7K", StackFormatter.quantityToRSDecimalStack(21_700)); - assertEquals("100K", StackFormatter.quantityToRSDecimalStack(100_000)); - assertEquals("100.3K", StackFormatter.quantityToRSDecimalStack(100_300)); - assertEquals("1M", StackFormatter.quantityToRSDecimalStack(1_000_000)); - assertEquals("8.4M", StackFormatter.quantityToRSDecimalStack(8_450_000)); - assertEquals("10M", StackFormatter.quantityToRSDecimalStack(10_000_000)); - assertEquals("12.8M", StackFormatter.quantityToRSDecimalStack(12_800_000)); - assertEquals("100M", StackFormatter.quantityToRSDecimalStack(100_000_000)); - assertEquals("250.1M", StackFormatter.quantityToRSDecimalStack(250_100_000)); - assertEquals("1B", StackFormatter.quantityToRSDecimalStack(1_000_000_000)); - assertEquals("1.5B", StackFormatter.quantityToRSDecimalStack(1500_000_000)); - assertEquals("2.1B", StackFormatter.quantityToRSDecimalStack(Integer.MAX_VALUE)); - } - - @Test - public void quantityToRSStackSize() - { - assertEquals("0", StackFormatter.quantityToRSStackSize(0)); - assertEquals("99999", StackFormatter.quantityToRSStackSize(99_999)); - assertEquals("100K", StackFormatter.quantityToRSStackSize(100_000)); - assertEquals("10M", StackFormatter.quantityToRSStackSize(10_000_000)); - assertEquals("2147M", StackFormatter.quantityToRSStackSize(Integer.MAX_VALUE)); - - assertEquals("0", StackFormatter.quantityToRSStackSize(-0)); - assertEquals("-400", StackFormatter.quantityToRSStackSize(-400)); - assertEquals("-400K", StackFormatter.quantityToRSStackSize(-400_000)); - assertEquals("-40M", StackFormatter.quantityToRSStackSize(-40_000_000)); - assertEquals("-2147M", StackFormatter.quantityToRSStackSize(Integer.MIN_VALUE)); - } - - @Test - public void quantityToStackSize() - { - assertEquals("0", StackFormatter.quantityToStackSize(0)); - assertEquals("999", StackFormatter.quantityToStackSize(999)); - assertEquals("1,000", StackFormatter.quantityToStackSize(1000)); - assertEquals("9,450", StackFormatter.quantityToStackSize(9450)); - assertEquals("14.5K", StackFormatter.quantityToStackSize(14_500)); - assertEquals("99.9K", StackFormatter.quantityToStackSize(99_920)); - assertEquals("100K", StackFormatter.quantityToStackSize(100_000)); - assertEquals("10M", StackFormatter.quantityToStackSize(10_000_000)); - assertEquals("2.14B", StackFormatter.quantityToStackSize(Integer.MAX_VALUE)); - assertEquals("100B", StackFormatter.quantityToStackSize(100_000_000_000L)); - - assertEquals("0", StackFormatter.quantityToStackSize(-0)); - assertEquals("-400", StackFormatter.quantityToStackSize(-400)); - assertEquals("-400K", StackFormatter.quantityToStackSize(-400_000)); - assertEquals("-40M", StackFormatter.quantityToStackSize(-40_000_000)); - assertEquals("-2.14B", StackFormatter.quantityToStackSize(Integer.MIN_VALUE)); - assertEquals("-400B", StackFormatter.quantityToStackSize(-400_000_000_000L)); - } - - @Test - public void quantityToPreciseStackSize() - { - assertEquals("0", StackFormatter.quantityToRSDecimalStack(0)); - assertEquals("8500", StackFormatter.quantityToRSDecimalStack(8_500, true)); - assertEquals("10K", StackFormatter.quantityToRSDecimalStack(10_000, true)); - assertEquals("21.7K", StackFormatter.quantityToRSDecimalStack(21_710, true)); - assertEquals("100K", StackFormatter.quantityToRSDecimalStack(100_000, true)); - assertEquals("100.3K", StackFormatter.quantityToRSDecimalStack(100_310, true)); - assertEquals("1M", StackFormatter.quantityToRSDecimalStack(1_000_000, true)); - assertEquals("8.45M", StackFormatter.quantityToRSDecimalStack(8_450_000, true)); - assertEquals("8.451M", StackFormatter.quantityToRSDecimalStack(8_451_000, true)); - assertEquals("10M", StackFormatter.quantityToRSDecimalStack(10_000_000, true)); - assertEquals("12.8M", StackFormatter.quantityToRSDecimalStack(12_800_000, true)); - assertEquals("12.85M", StackFormatter.quantityToRSDecimalStack(12_850_000, true)); - assertEquals("12.851M", StackFormatter.quantityToRSDecimalStack(12_851_000, true)); - assertEquals("100M", StackFormatter.quantityToRSDecimalStack(100_000_000, true)); - assertEquals("250.1M", StackFormatter.quantityToRSDecimalStack(250_100_000, true)); - assertEquals("250.151M", StackFormatter.quantityToRSDecimalStack(250_151_000, true)); - assertEquals("1B", StackFormatter.quantityToRSDecimalStack(1_000_000_000, true)); - assertEquals("1.5B", StackFormatter.quantityToRSDecimalStack(1500_000_000, true)); - assertEquals("1.55B", StackFormatter.quantityToRSDecimalStack(1550_000_000, true)); - assertEquals("2.147B", StackFormatter.quantityToRSDecimalStack(Integer.MAX_VALUE, true)); - } - - @Test - public void stackSizeToQuantity() throws ParseException - { - assertEquals(0, StackFormatter.stackSizeToQuantity("0")); - assertEquals(907, StackFormatter.stackSizeToQuantity("907")); - assertEquals(1200, StackFormatter.stackSizeToQuantity("1200")); - assertEquals(10_500, StackFormatter.stackSizeToQuantity("10,500")); - assertEquals(10_500, StackFormatter.stackSizeToQuantity("10.5K")); - assertEquals(33_560_000, StackFormatter.stackSizeToQuantity("33.56M")); - assertEquals(2_000_000_000, StackFormatter.stackSizeToQuantity("2B")); - - assertEquals(0, StackFormatter.stackSizeToQuantity("-0")); - assertEquals(-400, StackFormatter.stackSizeToQuantity("-400")); - assertEquals(-400_000, StackFormatter.stackSizeToQuantity("-400k")); - assertEquals(-40_543_000, StackFormatter.stackSizeToQuantity("-40.543M")); - - try - { - StackFormatter.stackSizeToQuantity("0L"); - fail("Should have thrown an exception for invalid suffix."); - } - catch (ParseException ignore) - { - } - - try - { - StackFormatter.stackSizeToQuantity("badstack"); - fail("Should have thrown an exception for improperly formatted stack."); - } - catch (ParseException ignore) - { - } - } -}